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

    @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
    }
    Ответ написан
    Комментировать
  • К какому слою относится Repository и как возвращать Business object?

    @AlexHell
    class User {Id, Name, Age}
    
    class UserRepository
    {
     User GetUserById(long Id)
      {
      string[] data = {select from Users where id = Id}
      return new User() {Id = Id, Name = data[0], Age = data[1] };
      }
    
      void PutUser(User)
      {
        {insert into Users}
      }
    }


    Зачем вам UserEntity? Если у вас доменный объект User - везде его и передавайте, и Repo олжен его же вертать при чтении из БД и его же принимать чтоб сохранять в БД.

    Если вопрос в EntityFramework (и иже с ними ORM) с обязательным отнаследованием от базового Entity класса - ну сделайте маппинг опять же внутри UserRepo и не отдавайте вообще никогда вовне UserEntity, всмысле как private class например чисто для namespace / пакета
    Ответ написан
    Комментировать
  • Шаблон проектирования - посредник (Mediator) объясните на простейшем примере как он работает?

    @AlexHell
    если не ошибаюсь, приведу пример из геймдева: список слотов SlotList, и сам слот Slot, вот коллега (colleague) это Slot и их много, а медиатор (mediator) это SlotList т.е. посредник который координирует все слоты, причем событие клика по (x,y) на сцене мы передаем в медиатор, а он решает в какой слот мы попали (циклом например сравнивает bounding box), также мы можем обратиться к медиатору чтобы заполнить его список слотов например передать какой-то Dto или список Dto для визуализации в слотах, а уже медиатор расставит в каждом слоте свою картинку и текст

    вот другой пример (но детально там не разбирался) https://github.com/marwie/Design-Patterns-in-Unity...
    Ответ написан
    Комментировать
  • Как начать использовать шаблон спецификация?

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

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

    более конкретно по вашему вопросу не ясно вот это
    "Проще говоря, мне нужно указывать условия для метода findBy($criteria) которая внутри в зависимости от типа ресурса будет конвертироваться в формат условия который понимает ресурс."
    что есть "в зависимости от типа ресурса" - какие виды ресурсов?
    вообще у вас должна быть начинка "реальной работы", для случая спецификации: когда в вашем findBy вызываются специфичные методы которые в спецификации есть, возможно надо и с другими шаблонами/сущностями сгруппировать, например из спецификации вызывать конкретный метод одного из полиморфных преобразователей (IImplementer, Implementer1, Implementer2) или полиморфный билдер, допустим в методе Invoke(IImplementer) вашей спецификации будет дергаться кокнертные методы IImplementer которые для случая с API будут готовить одну строку по http а для случая с sql бд будут генерить sql строку, аппендить ее к результату или аналогичное
    Ответ написан
    3 комментария