2017-01-07 3 views
-1

Основной вопрос заключается в том, следует ли вести логику в классах «объект» или в отдельных службах, выполняющих вычисления?Должен ли объект обрабатывать свои собственные действия/логику?

Давайте иметь сценарий: У нас есть объект типа «Многоугольник», который может отображаться на холсте, его также можно объединить с другими многоугольниками, создающими новый, который является суммой обоих. Итак, у нас должны быть такие методы, как: 1. DrawOnCanvas (..) 2. Merge (..) Итак, вопрос в том, должны ли эти методы храниться в классе Polygon (ну, DrawOnCanvas может быть сохранен в классе Canvas) или в каком-то классе PolygonService?
Существуют ли некоторые формализованные методологии, которые предлагают один путь друг другу?

ответ

0

Есть ли некоторые формализованные методологии, которые предлагают один путь через ?

Не на всех, но вы бы назвали это a good separation of concerns.

Некоторые наблюдения:

  • операция, как DrawOnCanvas(...) не будет из Polygon класса, потому что вы хотите обеспечить повторное использование. То есть, Polygon должен использоваться как объект с возможностью рисования или как обычный объект домена. Я вижу метод DrawOnCanvas(...) как часть класса, такого как UIRenderer, который обеспечит перегрузку для обработки экземпляров Polygon.

  • Merge(...) не должно быть на Polygon, потому что включает в себя два полигона. Безопасно реализовать его на PolygonService.

  • Вы должны реализовать методы Polygon, если они представляют собой операцию, которая мутирует в Polygon или только включает в себя данный экземпляр Polygon. Например, CalculateArea(...), CalculatePerimeter(...) ...

0

PolygonService, безусловно, плохая идея, если только из-за имени. Возможно, вам понадобится дополнительный класс, ответственный за взаимодействие между Canvas и Polygon, когда это станет интересной сложностью, и это определенно нуждается в другом имени и не смешивается с классом, ответственным за слияние и создание новых.

Смежные вопросы