Примеры написаны на F #, но их легко перевести на любой другой функциональный язык с алгебраическими типами (в моем случае Haskell и PureScript).

я был большой опыт написания доменных приложений с использованием C #. Чем больше приложений я пишу, тем больше я нахожу, что хочу использовать подход, который не очень хорошо подходит для стандартных методов C # / OO:

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

Поэтому я смотрю на функциональные языки, такие как F #. В конце концов, нет никаких причин, по которым доменный дизайнимеет быть реализован с использованием ОО.

Мне было интересно, есть ли у кого-нибудь какие-либо идеи / опыт в разработке дизайна, ориентированного на домен, с использованием функционального языка. Особенно:

Как будет выглядеть функциональная модель предметной области?Как бы вы абстрагировали слой доступа к данным от модели предметной области?
 Hakeem16 янв. 2011 г., 20:20
Это очень хороший вопрос, над которым я тоже пытаюсь работать. Я думаю, что традиционные ORM не будут работать на функциональных языках, таких как F #, потому что значения являются неизменяемыми по умолчанию, но всегда есть изменения, внесенные в данные, которые необходимо сохранить. Что касается модели предметной области, я думаю, это может быть какая-то функциональная библиотека, состоящая из записей и различающихся объединений. Существует также мнение, что FP не может быть правильным выбором для написания приложений для конечных пользователей, это скорее технология для построения параллельных \ асинхронных сред. Я обязательно буду следить за этим обсуждением!
 MattDavey07 янв. 2014 г., 13:03
Я бы порекомендовал прочитать"Проектирование с типами" серия наF # для удовольствия и прибыли.

Ответы на вопрос(4)

который является функциональным языком, для создания моделей предметной области.Эта презентация неплохое вступление (и это также потрясающая демонстрация HTML5).

Короче говоря, функциональное отношение прекрасно в сочетании с Event Sorcing. Это позволяет очень легко создавать полностью тестируемые модели. И если вы не хотите прямо сейчас переходить на совершенно новый язык, современный C # - неплохой язык для написания функционально-подобного кода (по крайней мере, для реализации моделей общих доменов).

 markus_p22 сент. 2015 г., 15:45
ссылки не верны

Насколько мне известно, лучшая (только?) Книга о функционально-ориентированном доменном дизайнеМоделирование домена сделано функциональным, написанный Скоттом Влащиным, авторомF # для удовольствия и прибыли (упомянутое выше).

Прежде чем погрузиться в книгу, поговоримФункциональное программирование проектирования шаблонов большое резюме концепций (подсказка: нет шаблона :)

Примеры написаны на F #, но их легко перевести на любой другой функциональный язык с алгебраическими типами (в моем случае Haskell и PureScript).

Домен-управляемый дизайн с F # и EventStore

Отказ от ответственности: я автор.

 CodesInChaos27 февр. 2013 г., 13:28
Хотя это может быть хорошей статьей, она опасно близка к ответу только по ссылке.
Решение Вопроса

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

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

Очень хороший пример описан встатья о составлении финансовых договоров, Примером является приложение для оценки (и другой обработки) финансовых контрактов. Самое главное, чтобы создать модель контрактов - что они на самом деле? Чтобы ответить на это, авторы проектируют структуру данных для описания контрактов. Что-то вроде:

type Contract = 
  | Zero                         // No trades
  | Single of string * float     // Single trade (buy something for some price)
  | And of Contract * Contract   // Combine two contracts 
  | Until of Contract * DateTime // Contract that can be executed only until...
  // (...)

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

Резюме Я думаю, что фокус на структурах данных, которые используются для моделирования мира (и отделены от реализации, которая их использует), очень близок к ключевым концепциям DDD.

 Andy Skirrow17 янв. 2011 г., 18:37
Я еще не прошел через это подробно, но эта статья выглядит довольно интересно. Спасибо

Ваш ответ на вопрос