2015-10-02 3 views
1

Мы создаем наше приложение, используя DDD.Ценность Объект и внешние библиотеки

Мы пишем наш доменный уровень, и во многих случаях нам нужен тип, например, Деньги, что не входит в наш домен, это больше, чем просто тип объекта, который не существует на языке (PHP).

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

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

  1. Можем ли мы использовать внешние библиотеки в нашем домене?
  2. Можем ли мы определить интерфейс для ValueObject?
  3. Должны ли мы положить деньги под наш домен? Это не бухгалтерское программное обеспечение, это просто примитивный тип, который нам нужно использовать, но для нас это действительно не важно. Зачем нам оставаться в домене?

Что является лучшим способом сохранить наш домен, но решить эту проблему?

ответ

0
  1. Да, до тех пор, как они непосредственно не делать I/O вещи (файловую систему/сеть/доступ к базе данных) и не ссылаться на инфраструктуру или ввода/вывода связанных библиотек.

  2. Да, но почему?

  3. Да, это именно то, для чего предназначены объекты ценности. Домен электронной коммерции не связан с доставкой по почте, но CustomerAddress является совершенно допустимым VO.

Где вы могли бы быть на что-то, хотя в том, что в зависимости от вашего домена, деньги могут быть в слое домена, но в другом Bounded Context, что конкретно имеет дело с оплатой. Но это не всегда так.

0

Отвечая на Ваш вопрос:

  1. Да, вы можете. Но вы должны понимать, что эта библиотека становится частью вашего домена. Поэтому он должен соответствовать вашему домену (например, если в библиотеке есть 100500 классов, и вам нужен только один из них - это нехорошо использовать в библиотеке). В общем, вы можете это сделать.
  2. Я не думаю, что это хорошая идея для объекта ценности. Если вам нужно создать для него интерфейс, это означает, что он вам не подходит. Ir выглядит как надстройка для такого простого объекта.
  3. Действительно ли это объект домена? Может быть, это просто «хорошо известный» класс, как int, string. И вы можете поместить его в слой infrastructure. Таким образом, каждая часть вашей системы может использовать его. Мы делаем это в нашем проекте. Мы переместили несколько классов и типов «все приложения», которые «никогда не меняются» в одной библиотеке model.infrastructure, и это уменьшенные сопоставления и преобразования между слоями.

Но будьте осторожны, этот ответ, как много ответов на вопросы DDD, - primarily opinion-based, потому что я не знаю всей вашей логики приложения.

+0

Начну с вашего ответа 3.. Я чувствую, что Деньги не являются ValueObject в нашем домене. Это не бухгалтерское программное обеспечение, мы просто хотим просто обрабатывать деньги «хорошим способом» и наслаждаться дополнительными возможностями, которые могут возникнуть в этой библиотеке. Например: 'substract',' add', 'equals' и т. Д. Вопрос: Если я поместил это под инфраструктуру, как можно связать мой Entity с этим примитивом типа« Деньги »? На этом уровне я думаю, и поэтому я думал о создании интерфейса для этого VO с базовыми необходимыми функциями позже для инфраструктурного уровня ... – fureszpeter

+0

@fureszpeter Я вижу три решения: включите эту библиотеку в вашем домене, создайте общую библиотеку (которую можно использовать на уровне домена) и создайте интерфейс домена и реализуйте. Я не знаю всех функций php, поэтому вам нужно сравнить, каким образом это хороший компромисс между сложностью разработки и разделением слоев и использованием DDD (DDD всегда является компромиссом, очень сложно создать чистую DDD-приложение) – Backs

Смежные вопросы