doudu3961 2015-05-03 09:50
浏览 283

DDD聚合根设计用于具有内部类型的关系

Lets say that i have an aggregate root named User the user can have multiple Vehicle, the Vehicle entity has types such as (suv, truck, sedan, etc ...).

In that case if i want to get the User vehicles of type sedan only do i have to design my aggregate to get the sedans directly from the aggregate like User->getSedans() ?

Or can i get that throw the UserRepository->getVehiclesOfTypeSedan() and the aggregates only hold the Vehicles ?

  • 写回答

1条回答 默认 最新

  • dqtdz08206 2015-05-03 10:35
    关注

    To keep your interface and inheritance hand in hand, I think it is better to separate your logic:

    UserRepository->getVehicles("sedan");
    

    Or you can utilize method-chaining:

    UserRepository->getVehicles()->sedan;
    

    In the above code, getVehicles(), returns a collection object which has NOT a property named sedan. You have to use php __get() to do the operation. Why then I do this? Because if you were able to fetch the cars by type though a property (remember properties are not functions, there is no execution), then it literally means that you have fetches all types and have them ready:

    WRONG WAY AND MEMORY-KILLER APPROACH is that you fetch all of the user's car and put each type in its associated property.

    Better way is returning an object, the object then is shipped with a function __get() to be invoked on each property retrieval:

    $object->sedan;

    sedan does not exist, so you have already predicted that:

    function __get($param)
    {
       $this->__getByType($param);
    }
    

    Though I prefer my very first suggestion.

    评论

报告相同问题?

悬赏问题

  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题