Я работаю над проектом, который в настоящее время находится на начальной стадии, поэтому я могу внести некоторые архитектурные изменения на этом этапе. Это больше связано с дизайном. Итак, вот оно:
Я создаю Web API + EF + .net Framework + Шаблон репозитория.
Итак, у меня есть слой репозитория, который возвращает данные из контекста базы данных. Ниже приведен фрагмент кода linq в слое репозитория:
from custVerExt in _context.VERIFICATIONEXTs.Where(x => x.ID == custVer.ID).DefaultIfEmpty()
from zref_vcode in _context.LISTDATAs.Where(x => x.ID == custVerExt.VERIFICATIONCD).DefaultIfEmpty()
from refUi_vcode in _context.LBLTXTs.Where(x => x.ID == zref_vcode.REFLISTDATANMLBLID).DefaultIfEmpty()
from zref_tcode in _context.LISTDATAs.Where(x => x.ID == custVerExt.TYPEID).DefaultIfEmpty()
from refUi_tcode in _context.LBLTXTs.Where(x => x.ID == zref_tcode.REFLISTDATANMLBLID).DefaultIfEmpty()
Теперь я хочу, чтобы оба объекта refUi_vcode
& refUi_tcode
типа _context.LBLTXTs
были возвращены.
что-то вроде select refUi_vcode.name,refUi_tcode.name
Я не хочу, чтобы мой репозиторий возвращал DTO (это работа моего уровня обслуживания), поэтому я хочу вернуть некоторый объект домена клиента.
Теперь я придумал две структуры для моего доменного объекта. В случае, указанном выше, если я хочу вернуть значение из одной и той же таблицы дважды, я могу создать два экземпляра одного и того же объекта ИЛИ создать два отдельных свойства, которые я хочу из этих двух объектов.
Пример кода:
public class CustDomainObj
{
public LBLTXTs obj1 {get;set;}
public LBLTXTs obj2 {get;set;}
}
//OR
public class CustDomainObj
{
public string obj1 {get;set;}
public string obj2 {get;set;}
}
Мой DTO выглядит так:
public CustDTO
{
public string vname{get;set;}
public string cname{get;set;}
}
Вопросы:
- Я не уверен, что моя политика репозитория - доменная политика - хорошая ставка в долгосрочной перспективе. Если это какой путь я должен идти? (Несколько экземпляров одного и того же объекта Entity или просто возвращаются необходимые свойства)
- Если я верну необходимые свойства в доменном объекте, не будет ли это своего рода структурой DTO?
- Если оба моих подхода неверны, может ли кто-нибудь подсказать мне соответствующий пример?
В любом случае, спасибо!