Является ли отображение частью уровня данных или логики / бизнеса? - PullRequest
0 голосов
/ 23 мая 2018

Я работаю над 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 в слой данных.Я много читал, и некоторые люди делают это на уровне данных, некоторые на уровне логики.Цитаты типа Ваше отображение должно быть в слое логики, а не в слое данных , поэтому я в замешательстве.

Спасибо за помощь

1 Ответ

0 голосов
/ 23 мая 2018

Я назову вашу другую службу WCF службой источника данных , которая имеет свои собственные контракты данных, которые она возвращает через свои операции, на ваш уровень доступа к данным.Теперь ваш сервисный уровень не должен ничего знать о ваших сервисных объектах источника данных.Это должно быть независимым от них, поэтому в будущем, если вы планируете использовать другой источник данных вместо другой службы WCF, вам не нужно беспокоиться о перекомпиляции уровня службы.Ваш уровень обслуживания не должен иметь никаких ссылок на источники данных, что является одной из идей использования отдельного уровня доступа к данным.

Итак, чтобы ответить на ваш вопрос, выполните сопоставление на уровне данных самостоятельно, а не на уровне обслуживания.

...