В настоящее время я разрабатываю API, но я не уверен, является ли этот совокупный корень наилучшей практикой с точки зрения полезности.
Context
Это мои занятия:
.
(!) Меня волнует только история рыб. У меня нет намерения запрашивать / запрашивать сущность Salmon или сущность Carp по отдельности, и мне не нужно делать это на 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;
}
Заранее спасибо.