php - Am I using Domain Object correctly? -
according article here
you can think of them [services] "higher level domain objects", instead of business logic, services responsible interaction between domain objects , mappers. these structures end creating "public" interface interacting domain business logic. can avoid them, @ penalty of leaking domain logic controllers.
i have been reading on mvc, , ive split m part services, domain objects , data mappers. services , data mappers easy figure out, dont understand reason domain objects, can please give me examples? here code:
memberservice
class memberservice extends service { public function authenticate() { $domainobject = $this->domainobjectfactory->getdomainobject('member'); $datamapper = $this->databasefactory->getmapper('member'); $_temp_sess_id = 0; $_temp_sess_password = ""; $member = $datamapper->fetch( $_temp_sess_id ); $authenticationresult = $domainobject->checkpassword( $member['password'], $_temp_sess_password ); if (!$authenticationresult) { $member = ['user_id' => 0]; } return $member; } } memberdomainobject
class memberdomainobject extends domainobject { public function checkpassword( $datamapperpassword, $locallystoredpassword ) { if ( $datamapperpassword !== $locallystoredpassword ) return false; return true; } } update:
this question regarding method checkpassword , why necessary create separate object use if statement used inside service instead, saving ram using additional resources creating new object.
you've created memberdomainobject trough factory in example. code showing has none 0 informational value purpose.
you need make real app few objects, services , 2 domains @ least, can "you using domain objects well".
aren't interested in "model objects"? no need talk domain objects if need sure correct "service > factory > model object > mapper" relation using.
creating objects via factory practice can alter or add contructor calls during refactor in 1 place.
one advice is: use class names namespaces (fqn) in factories, helps navigating trough code , refactoring well
$member = $this->domainobjectfactory->getdomainobject(memberdomainobject::class); //in php5.5+ you can substitute
class domainobject { static function classname(){ return get_called_class(); } } $member = $this->domainobjectfactory->getdomainobject(memberdomainobject::classname()); in php <= 5.4 , replace on upgrade.
as same the
$member = $this->domainobjectfactory->getmember(); is not issue, can specify returning type in ::getmember()
Comments
Post a Comment