Шаблон DataMapper повреждает MVC?

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

  • Графический процессор работает в основном линейно и всегда может выталкивать на экран одинаковое количество полигонов.

  • Тем не менее, если вы удвоили количество объектов, ЦП должен приложить больше усилий, чтобы оживить все эти объекты (матричные преобразования и т. Д.). Это зависит от вашей модели мира и другой работы, выполняемой Javascript. Также важны такие условия, как количество видимых объектов.

Для простых моделей, где все многоугольники находятся на экране всегда, тогда оно должно в значительной степени следовать правилу «половина частоты кадров, удвоение объектов». Для сцен, похожих на 3D-шутер, это определенно не так.

8
задан Sander Marechal 19 June 2009 в 08:50
поделиться

5 ответов

Using Value Objects, you can eliminate some of those public setter methods. Here's a description of the difference between Entity and Value Objects. Value Objects are immutable and often tied to an Entity. If you pass all values in with the constructor, you don't need to set these properties from external code.

Something extra, not directly related to an answer, but more focused on DDD:

(Disclaimer: The only thing I know about the Zend Framework is what I read in the linked article.) The Zend Framework is using DataMappers instead of Repositories. Is this really DDD-ish? Well, Fowler's interpretation of a Repository might say no. However, Eric Evans states that a DDD Repository can be very simple. At its simplest, a Repository is a DataMapper (See DDD book). For something more complex and still DDD, see the Fowler article. DDD has a conceptual Repository that may differ from the pattern definition.

I urge you to continue reading about Domain-Driven Design. I think there's a flaw in the assumption that getters and setters violate DDD. DDD is about focusing on the domain model and best practices to accomplish that. Accessors are just a minor detail.

2
ответ дан 5 December 2019 в 22:20
поделиться

Вам не нужно реализовывать все геттеры / сеттеры, вы можете использовать __get () и __set (). Тогда в чем проблема?

2
ответ дан 5 December 2019 в 22:20
поделиться

Насколько я понимаю, этот вопрос скорее философский, чем практический.

У меня нет времени писать подробно, но вот мои два цента. Хотя я согласен с тем, что вы хотите ограничить количество запросов на получение и установку, поскольку класс должен скрывать свои внутренние компоненты, вам также необходимо учитывать, что Java и PHP - это разные инструменты и имеют разные цели. В веб-среде ваши классы создаются и удаляются с каждым запросом, поэтому код, который вы пишете, не должен зависеть от огромных классов. В указанной вами статье автор предлагает разместить логику представления в классе. Это, вероятно, не имеет смысла в Интернете, поскольку я, вероятно, захочу представить представление в нескольких форматах (rss, html и т. Д.). Следовательно, использование методов доступа (get & set) является неизбежным злом. Вы все равно хотите использовать их с умом, чтобы не прострелить себе ногу. Ключ в том, чтобы попытаться заставить ваши классы делать работу за вас, а не заставлять их выполнять работу извне. Получая доступ к своим свойствам с помощью метода, а не напрямую, вы скрываете внутренние компоненты, которые вам нужны.

Опять же, в этом посте можно использовать несколько примеров, но у меня сейчас нет времени.

Может ли кто-нибудь предоставить несколько примеров того, почему методы доступа не являются злом?

1
ответ дан 5 December 2019 в 22:20
поделиться

Реализация геттеров и сеттеров, на мой взгляд, имеет два преимущества:

  1. Вы можете выбрать, какие свойства сделать общедоступными, поэтому вам необязательно раскрывать все внутренние компоненты модели
  2. ] Если вы используете IDE с автозаполнением, все доступные свойства будут находиться на вкладке, когда вы начнете вводить «get» или «set» - для меня этого уже достаточно.
0
ответ дан 5 December 2019 в 22:20
поделиться

Здесь есть два подхода: то, что я называю подходом «скажи, а не спрашивай», а другой - подход ViewModel / DTO. По сути, вопросы вращаются вокруг того, что является «моделью» на ваш взгляд. Tell don't ask требует, чтобы объект можно было экстернализовать только с помощью самого объекта. Другими словами, для рендеринга объекта у вас должен быть метод рендеринга, но этот метод рендеринга должен взаимодействовать с интерфейсом. Примерно так:

class DomainObject {
   ....
   public function render(DomainObjectRenderer $renderer) {
        return $renderer->renderDomainObject(array $thegorydetails);
   }
}

В контексте Zend Framework вы можете создать подкласс Zend_View, и ваш подкласс будет реализовывать этот интерфейс.

Я делал это раньше, но это немного громоздко.

Второй вариант - преобразовать вашу модель предметной области в объект ViewModel, который похож на упрощенное, выровненное, «выровненное» представление ваших данных , настроенный для каждого конкретного представления (с одной ViewModel для каждого представления), и на обратном пути преобразовать данные POST в EditModel.

Это очень популярный шаблон в мире ASP.NET MVC, но он также похож на шаблон класса «DTO», используемый для передачи данных между «уровнями» в приложении. Вам нужно будет создать картографов, чтобы делать за вас грязную работу (на самом деле мало чем отличается от DataMapper). В PHP 5.3 вы можете использовать отражение для изменения частных свойств,

1
ответ дан 5 December 2019 в 22:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: