Я работаю над N-уровневым сервисным приложением, которое в основном (у меня очень специфический вопрос, но мне нужно сначала объяснить всю ситуацию / архитектуру) :
Данные -> Логика (Бизнес) -> Служба WCF -> Хост (Служба Winddows) , где:
Данные - это постоянство данных, но оно имеетнет строк подключения.Все взято из другого сервиса WCF.Таким образом, все, что у меня есть, это ServiceReferences
и один класс FooData
с несколькими методами (он реализует интерфейс IFooData
).Как вы можете видеть ниже, он возвращает Bar
объект, который из BarServiceReference
автоматически генерируется VS.
using FooService.Data.BarServiceReference;
public class FooData : IFooData
{
public BarDto Func1(int id)
{
try
{
using (BarServiceClient client = new BarServiceClient())
{
return client.GetBar(id);
}
}
catch (System.ServiceModel.FaultException ex)
{
throw new Exception($"Inner exception in BarServiceClient: { ex.Message }", ex);
}
}
}
Logic , здесь у меня есть отображение IMapper
профили и класс FooLogic
, где я делаю инъекции через DI IFooData
и IMapper
.Внутри этого класса у меня есть несколько методов.Один из них:
public class FooLogic
{
private IMapper Mapper { get; }
private IFooData FooData { get; }
public FooLogic(IMapper mapper, IFooData fooData)
{
Mapper = mapper;
FooData = fooData;
}
public Bar GetBar(int id)
{
BarDto barDto = FooData.Func1(itemId);
Bar bar = Mapper.Map<BarDto, Bar>(barDto);
// There are lot more, taken from the Data layer.
// Some operations are performed. The Bar is basically modified a little bit/adjusted
return bar;
}
}
Как вы можете видеть, мой логический слой должен знать о "BarDto", что вынуждает меня включать Reference, используя.Я не уверен в этом.
Вопрос ...
Должен ли я вернуть Bar
со слоя Data
вместо BarDto
?В этом случае мне придется внедрить IMapper в слой данных.Я много читал, и некоторые люди делают это на уровне данных, некоторые на уровне логики.Цитаты типа Ваше отображение должно быть в слое логики, а не в слое данных , поэтому я в замешательстве.
Спасибо за помощь