Запутался с DDD
От: vaa  
Дата: 19.10.21 04:46
Оценка:
Основной опыт на C#. Интересуюсь также другими ЯП.
В целом C# представляет довольно гибкий инструмент.
Смущает то, что большая часть бестпрактик в нем имеют смысл соглашений.
От readonly который защищает только ссылку, но не граф объекта.
До например дефолтного ОРМ типа EF, который на корню рушит идеологию DDD создания объектов через конструктор.
Т.е. использование EF в парадигме DDD сильно затруднено.
Кроме того у программиста не знакомого с соглашениями всегда есть возможность вызвать ef напрямую минуя домен.
Если пойти дальше и посмотреть на F# то там DDD имеет гораздо более острую форму.
т.е. в C# может быть св-во
public class Order
{
 //...
 
 public bool IsApproved { get; protected set; }
 
 public IEnumerable<OrderHistoryEntry> HistoryEntries
 {
  get { return historyEntries; }
 }
 
 public void Approve()
 {
  IsApproved = true;
 
  var orderHistoryEntry = new OrderHistoryEntry(this, OrderHistoryType.Approved);
 
  historyEntries.Add(orderHistoryEntry);
 }
}

В F# так не рекомендуют
type Order = private UnApproved  |  Approved               
module Order =
    let create () = Order.UnApproved
    let approve order = 
        match order with
        | UnApproved -> Approved
        | _ -> order


По сути в пределе получается произведение состояний (по классу на каждое состояние).
И вроде чем больше корректности тем лучше, но тогда может возникнуть дурная бесконечность.
Не так ли?
☭ ✊ В мире нет ничего, кроме движущейся материи.
Отредактировано 19.10.2021 4:47 Разраб . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.