ASP.NET MVC архитектура DDD (Домаин Дривен Design)

DDD (Домаин Дривен Design), - набор главных файлов principos и práticas, что помогают нам решать и понимать проблемы дела (Домен) в рисунке систем, ориентируемых на объекты. DDD - очень широкая тема.

Я использую архитектуру N - Ты кастрируешь с Windows Forms, но в ASP.NET MVC я появляется сомнение, так как я - новичок работая в Веб системах.

Enfoquemonos в архитектуре DDD.

Domain Driven Design

Мы идем прямо в проблему, которая у меня есть. Исходя из, что организации домена - объекты, у которых есть тождество и они важны внутри логики дела нашего приложения, но который не имеет, потому что быть известны прямо другим слоям приложения.

Это структура моего проекта.

Estructura N-Capas

Я использую DTOs или Дата Трансфер Обхектс - классы, главная цель которых состоит в том, чтобы упрощать объекты, которыми они идут обмениваться между процессами.

В Слое Приложения, в котором у меня есть два проекта: Servicos Приложения и Адаптеров.

  • Адаптеры: Именно здесь у меня есть осуществленный мои DTOs.
  • Услуги Приложения: Именно в этом слое я осуществляю методы приложения, так как мой Слой презентации - невежда Слоя Домена и viseversa. Возвращаясь в тему именно в этом слое я делаю магию, который Организации Домена превращают в DTOs посредством AutoMapper.

Организации Домена.

public class Proveedor
{
    public int ProveedorId { get; set; }
    public string RazonSocial { get; set; }
    public string Direccion { get; set; }
}

DTOs

public class ProveedorDto
{
    [Key]
    public int ProveedorId { get; set; }

    [Display(Name = "Razón Social")]
    public string RazonSocial { get; set; }

    [Display(Name = "Dirección")]
    public string Direccion { get; set; }
}

Применяя AutoMapper в Услугах Приложения.

public IEnumerable<ProveedorDto> GetAll()
    {
        IEnumerable<Proveedor> _proveedor = _sdProveedor.GetAll();
        config = new MapperConfiguration(cfg => cfg.CreateMap<Proveedor, ProveedorDto>());
        IEnumerable<ProveedorDto> listDto = config.CreateMapper().Map<IEnumerable<ProveedorDto>>(_proveedor);
        return listDto;
    }

Таким образом дело в том, что мои Организации Домена не прибывают в Слой Презентации и DTOs, которые находятся в Слое Адаптеров, использованы как Models главного файла рисунка MVC.

  • Я должен создавать Models в Слое Презентации, должен прикреплять меня к букве, которой Models были осуществлены в этом слое, такой который это говорит MVC?
  • Как я должен осуществлять эту часть, которую я объяснил, используя хорошие практики для того, чтобы осталась многословной моя архитектура?
4
задан 19.09.2019, 15:52
0 ответов

Друг

В самом деле это противоположность все приложение должно знать в домен. Идея за DDD состоит в том, чтобы создавать модель дела или же черный ящик, который работает и решает проблемы свойственные делу.

Тогда подходом руководили в создании экосистемы, где организации работали и сотрудничали.

Концепция для того, чтобы он остался более ясным, была бы чем-то как: у солнца с его собственным существованием есть эффект, Ваш свет Ваша сила тяжести затрагивает в планеты климат, так должна быть каждое событие, которое появляется в домене.

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

Вся эта логика герметизируется в корпусе в домене таким образом что операции не типичные:

_repisitorio.facturas.add (счет)

если нет

model. Ты выписываешь счет-фактуру. RegistrarFactura (счет)

В genera совсем ты герметизируешь в корпусе логику в домене, способном обрабатывать операции, свойственные тому же самому то, что делает это очень ценным.

Также важно упоминать, что домен не имеет общее с настойчивостью, из-за которой оно было бы должно мочь функционировать без той же самой даже, что домен без настойчивости почти бесполезный.

Сейчас разум того, чтобы использовать преобразования объектов домена в пользователя, - которым в mvc результаты делаются через viewmodel, и в домене концепция может может вводить тип сотрудничества между организациями дела то, что это не делает кандидат, чтобы представлять накануне пользователя.

например у тебя может быть команда покупки и Ваши статьи и пользователь с ui отображает команду покупки и количество статей, очевидно нужно обрабатывать это и результат наполнит viewmodel, готовый отображать

Другая важная концепция состоит, в том, что будучи сфокусирован на Домене уже, не говорят о концепции, изолированный например перед эрой типично, иметь что-то организации как

Emp сейчас Использован. Простой, нет?

Организации должны быть общими между всеми людьми команды вот то, что называются язык Ubiquitous, возможно говорить что разговорный язык не должен существовать abstraciones, как раньше оно случалось, если не, что ты был бы должен мочь беседовать с экспертом дела тех же концепций.

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

Проверь книгу Эрика Эванса, Домаин Дриве Design

Мы идем прямо в проблему, которая у меня есть. Исходя из, что организации домена - объекты, у которых есть тождество и они важны внутри логики дела нашего приложения, но который не имеет, потому что быть известны прямо другим слоям приложения.

Фальшивый, они видны на всех уровнях, но не обязательно должен знать их пользователь.

  • Я должен создавать Models в Слое Презентации, должен прикреплять меня к букве, которой Models были осуществлены в этом слое, такой который это говорит MVC?

    Поскольку он осуществляется в mvc, он не имеет общее с ddd, но важная точка, действия очень связаны с view model, что как Ваше имя это говорит, это модель вида или же страницы, которая не имеет ничего общего с твоим доменом, из-за которого Ваш смысл бытия - вид или страница и это концепция манипулируя в mvc.

  • Как я должен осуществлять эту часть, которую я объяснил, используя хорошие практики для того, чтобы осталась многословной моя архитектура?

    Нет средства ты должен осведомляться.

1
ответ дан 03.12.2019, 17:54
  • 1
    Привет, Карлос тогда создавая Вьевмодэль tendrí к которому применять automapper в слое presentació n, чтобы превращать организации дела в ViewModel и наоборот. Я podrí схвати иметь algú n соединение, чтобы осведомляться, как я должен противостоять ViewModel. –  19.01.2017, 18:02

Я думаю, что важно считать ясным различие между теорией и практикой. На протяжении приложения ты будешь находиться во многих ситуациях, которые могут вынуждать тебя, когда этот сломает теорию за производительностью и эффективностью. Уже останься в тебе, как архитектор приложения, принимать это решение.

С моего личного опыта, модели ничего не красят в слое презентации. Я начал тем, что имел их в слое настойчивости, которая является Вашим идеальным сайтом, чтобы заканчивать в слое trasversal во все так называемую "Инфраструктуру", так как формы или другая, было легко заканчивать тем, что нуждаться в Вашей ссылке в других слоях. Теоретически, все связанное с настойчивостью, включенными моделями, они должны быть помещенными в вышеупомянутом слое. У домена не была бы должна бы ни быть никакая связь с моделями, ни знать о Вашем существовании.

Если ты - пурист архитектуры и способен сводить сопряжение между слоями к нулю, habrás прибывший в идеальную архитектуру, но я настаиваю, что часто необходимо ломать эти правила и делать вещи с головой. Когда он проведет время, и ты занял много времени работая с приложением, ты будешь замечать вещи, которые ты принес пользу и тех, которые ты повредил.

2
ответ дан 03.12.2019, 17:54
  • 1
    Спасибо за твое время, хороший ответ. –  19.01.2017, 17:05

Теги

Похожие вопросы