当前我正在设计一个API,但是我不确定从有用的角度来说,聚合根是否是最佳实践。
上下文
这些是我的课程: 。
(!)我只在乎FishHistory。我无意单独查询/请求鲑鱼实体或鲤鱼实体,也不需要在GroupRods或Rod上进行此操作。
就上下文而言,我知道不同的鱼类。 它们的属性(在逻辑上)彼此不同。该界面的原因是使其他开发人员可以根据需要添加不同的逻辑。
目标
我希望能够在不触摸其他控制器的情况下添加或删除不同鱼类的控制器。
我想做到这一点:
//GET
`api/fishhistory/rods/{rodid}/salmon`
`api/fishhistory/rods/{rodid}/carp`
使用存储库模式似乎是合法的,因为ORM(EF6)随时间变化的可能性很大。
此外,我目前正在研究两种鱼类,但是这个数量可能会增长到10-20,也许随着时间的推移会更多。
问题
基于上面的视觉和上下文,我不喜欢为每个单独的鱼类等创建存储库,因为这会损害可维护性-尤其是如果不同鱼类实体的数量增长到10到20或以前更多。我考虑过创建两个存储库,(1)存放所有鱼类,(2)存放所有鱼竿。但是我不确定是否会遇到交易问题。
我最好的情况是创建一个可供任何鱼类控制者使用的存储库。
public class SalmonController : ApiController
{
private IFishHistoryRepository _fishHistoryRepo;
public SalmonController(IFishHistoryRepository repo)
{
_fishHistoryRepo = repo;
}
// GET's
[HttpGet]
[Route("api/fishhistory/rods/{rodnumber}/salmons")]
public IHttpActionResult GetAllSalmons(int rodnumber)
{
// at this point, is there a way to achieve this action without querying the carps?
}
// Etc here
}
因此,这是否有可能:
// Used in SalmonController
public class FishHistory
{
GroupRods GroupRods;
ICollection<Salmon> Fishes;
}
// Used in CarpController
public class FishHistory
{
GroupRods GroupRods;
ICollection<Carp> Fishes;
}
谢谢。