Ответы пользователя по тегу Предметно-ориентированное проектирование
  • Как должна выглядеть модель. Какие шаблоны использовать?

    @AlexHell
    если много параметров и возможно расширение - можно Спецификацию использовать (в которой будет например кол-во товаров, их тип, может еще что в будущем)

    для простого случая - создавайте 1 базовый класс, и 2 подкласса
    общий метод содержит все что только может быть
    ICalculator
    {
    int GetCost(int count)
    }

    FixedCalculator : ICalculator
    {
    int _cost;

    FixedCalculator (int cost)
    {
    _cost = cost;
    }

    int GetCost(int count)
    {
    return count * _cost;
    }

    ProgressionCalculator : ICalculator
    {
    int _costBase; // базовая цена плюс..
    int _costDiscount; // скидка (минус процент или минус фикс) за каждые Step штук
    int _costDiscountStep;

    ProgressionCalculator(int cost, int costDiscount, int costDiscountStep)
    {
    _cost = cost;
    _costDiscount = costDiscount;
    _costDiscountStep = costDiscountStep;
    }

    int GetCost(int count)
    {
    return FORMULA
    }
    Ответ написан
    Комментировать
  • What layer should contain Queries in DDD?

    @AlexHell
    example with 2 types (Article and User):

    * InfrastructureLowLevel (know nothing about higher levels)
    - DatabaseImplementation
    - IQuery[TResult]
    .. can combine SQL for DB query, or invoke specific IRepository methods (override-able in IRepository)
    - IRepository[TQuery, TResult]
    methods:
    \ TResult GetSingleByQueiry(TQuery IQuery)
    \ List[TResult] GetMultiByQueiry(TQuery IQuery)
    .. invokes DatabaseImplementation
    .. invokes IQuery for specific actions - conditions by type

    * InfrastructureHighLevel (semi-domain, know about InfrastructureLowLevel):
    - Article
    - User
    - ArticleQuery : IQuery[Article]
    - UserQuery : IQuery[User]
    - ArticleRepository : IRepository[ArticleQuery, Article]
    - UserRepository : IRepository[UserQuery, User]

    * BisinessDomain (higher\highest level, know about InfrastructureHighLevel):
    - MyLogic
    usage:
    User user = UserRepository.GetSingleByQueiry(UserQuery)
    Article article = ArticleRepository.GetSingleByQueiry(ArticleQuery)
    Ответ написан
    Комментировать