|
|
|
Что такое service layer?
|
|||
|---|---|---|---|
|
#18+
Такой вот вопрос - вообще в Spring например - ну и вообще - service layer, который обычно singleton, его дергает controller, а сам он делает вызовы типа findByName в персистенц лайер. Вот это Service layer - это xfcnm model или нет? То есть view это понятно - страницы с контролами. Controller - это сами controller с мэппингом какой запрос куда перенаправить и как дернуть сервис. Domain entity - это часть модели. F djn cfv Service который между Controller и Domain - это часть модели или нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2012, 14:40:37 |
|
||
|
Что такое service layer?
|
|||
|---|---|---|---|
|
#18+
Service Layer это Transaction Script в каталоге Фаулера. http://martinfowler.com/eaaCatalog/transactionScript.html Очень рекомендую прочесть Enterprise Patterns, хотя бы в переводе. Service Layer описывает бизнес-процесс и является частью Domain Model. Он реализует такие методы, которые не могут находится в Domain Entity по той причине, что не реализуют поведение этой Entity. Правильное распределение методов между Service Layer и Domain Entity достаточно сложный вопрос, так как решение лежит по середине между двумя крайностями. Крайность Anemic Domain Model заключается в том что сущности не содержат поведения вообще. Из-за чего его сложно переиспользовать. Крайность Rich Domain Model заключается в том, что сущности содержает в себе слишком много поведения, которое к ним не относится и которое тянет за собой кучу интеграционных зависимостей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2012, 14:58:39 |
|
||
|
Что такое service layer?
|
|||
|---|---|---|---|
|
#18+
/topic/881080 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2012, 15:00:12 |
|
||
|
Что такое service layer?
|
|||
|---|---|---|---|
|
#18+
Свежая тема, много интересного можно подчерпнуть http://rsdn.ru/forum/design/4996858 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2012, 17:37:07 |
|
||
|
Что такое service layer?
|
|||
|---|---|---|---|
|
#18+
BlazkowiczКрайность Anemic Domain Model заключается в том что сущности не содержат поведения вообще. Из-за чего его сложно переиспользовать. Странный вывод. Как раз таки если сущность не содержит поведения то она легко переиспользуется, вплоть до того что особо храбрыебезрассудные отдают из вебсервисов сразу доменные сущности без введения понятия DTO. Чем больше сущность содержит поведения тем меньше вероятность её переиспользовать где-то либо ещё, так как работа с жирной моделью напоминает распутывание новогодней гирлянды, слишком уж много приходится держать в голове вариантов использования одной энтити. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2012, 19:07:04 |
|
||
|
Что такое service layer?
|
|||
|---|---|---|---|
|
#18+
vimbaBlazkowiczКрайность Anemic Domain Model заключается в том что сущности не содержат поведения вообще. Из-за чего его сложно переиспользовать. Странный вывод. Как раз таки если сущность не содержит поведения то она легко переиспользуется, вплоть до того что особо храбрыебезрассудные отдают из вебсервисов сразу доменные сущности без введения понятия DTO. Чем больше сущность содержит поведения тем меньше вероятность её переиспользовать где-то либо ещё, так как работа с жирной моделью напоминает распутывание новогодней гирлянды, слишком уж много приходится держать в голове вариантов использования одной энтити. ну в том весь и цимус. Что такое анемик домэйн - онли гет сет, никакой бизнес-логики и соотвественно переиспользовать нечего, ибо все в transaction scriptах. А грамотно спроектированная Rich модель(говорят есть такие! но я не видел), позволяет переиспользовать и логику. Кстати сделали core модуль используя Active Record, что-то среднее между анемик и рич, и знаете что? - палит! нет, я серьезно, как минимум половина логики реюзается. Допустим есть три приложения, все работают с Event. Так вот в core заимплеменчена record Event, и во всех трех проектах без единого изменения можно сделать Event.delete(), Event.findByMnemonic('HRAC') и тд - ништячок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2012, 20:45:06 |
|
||
|
Что такое service layer?
|
|||
|---|---|---|---|
|
#18+
забыл ник, +1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2012, 11:38:44 |
|
||
|
Что такое service layer?
|
|||
|---|---|---|---|
|
#18+
vimbaСтранный вывод. Вывод вполне логичный. Просто ситуация с необходимостью переиспользования логики возникает не везде. vimbaКак раз таки если сущность не содержит поведения то она легко переиспользуется Путаете мягкое с теплым. Сущность плохо переиспользуется не когда у неё есть поведение, а когда у неё есть зависимости, которые нельзя использовать в новом контексте. Я же говорю о переиспользовании логики. Вообще в плоских серверных приложениях такое не часто нужно, там каждая транзакция по-своему уникально и слои все легко прошиваются как вдоль так и поперек. А вот в толстом GUI, или когда у проекта 100500 интеграций, или в других не типичных аналогах Pet Store, и всплывают недостатки Anemic. Вот у меня, например, сейчас ситуация, когда нужно одни и те же вычисления делать при валидации и при автозаполнении значений. Логика не тривиальная. Но не писать же её два раза. Слои валидации и UI вообще минимально пересекаются, было бы глупо дергать валидацию непонятно покакому событию чтобы с помощью неё реализовать автозаполнение. Поэтому логика максимально выносится в сущности. Ааа, нет. У меня даже 3й слой есть, которому нужны те же вычисления - серверная 3rd party интеграция. Она тоже ни к UI ни к валидации отношения не имеет. И единственная альтернатива Rich model это "архитектура на хелперах". Делается отдельный класс с логикой для сущности, вот только логика становится в два раза сложнее, потому что находится снаружи. vimba, вплоть до того что особо храбрыебезрассудные отдают из вебсервисов сразу доменные сущности без введения понятия DTO. Ну, я так делаю. И что самое удивительное - логика этому не мешает. Потому что сериализуется только состояние. Наличие или отсутствие логики здесь так же перпендекулярно. A DTO - большое зло в том виде в котором его предлагают делать по-умолчанию - тупо копировать модель. vimbaЧем больше сущность содержит поведения тем меньше вероятность её переиспользовать где-то либо ещё Не вижу смысла объяснять ещё раз, что поведение не препятствует переиспользованию. Препятствуют - зависимости от других классов. Поэтому есть хорошее правило. Если логка ограничивается полями и свойсвами класса, она обязана быть в самом классе. vimba, так как работа с жирной моделью напоминает распутывание новогодней гирлянды, слишком уж много приходится держать в голове вариантов использования одной энтити. Anemic Model это первая ступень к упрощению. Но это аналогично разрубанию гордиева узла. Хорошо что вы до этого дошли. Но нужно двигаться дальше - вторая ступень это возвращение к Rich Model, но правильной, так же минимизирую связи как и в Anemic, но максимально переиспользуя логику как в Rich. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2013, 16:20:53 |
|
||
|
Что такое service layer?
|
|||
|---|---|---|---|
|
#18+
BlazkowiczИ единственная альтернатива Rich model это "архитектура на хелперах". Делается отдельный класс с логикой для сущности, вот только логика становится в два раза сложнее, потому что находится снаружи. И в какой слой этот хелпер засовывать? Я что-то непонимаю как это поможет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2013, 16:42:49 |
|
||
|
Что такое service layer?
|
|||
|---|---|---|---|
|
#18+
забыл никИ в какой слой этот хелпер засовывать? Я что-то непонимаю как это поможет Ну, это тривиальный дизайн. Не важно куда его засовывать, потому что так не стоит делать вообще. Вот сделали сущность без логики. И Transaction Script, в котором вся логика. И вдруг что-то из Transaction Script нам понадобилось где-то ещё? Как делает Anemic апологет? Создаёт Helper, выносит туда переиспользуемую логику, и использует её как внутри Transaction Script, так и в других слоях. А как нужно было сделать? Добавить логику в сущность и пользоваться ей везде, где сущность доступна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2013, 16:46:26 |
|
||
|
Что такое service layer?
|
|||
|---|---|---|---|
|
#18+
Blazkowiczзабыл никИ в какой слой этот хелпер засовывать? Я что-то непонимаю как это поможет Ну, это тривиальный дизайн. Не важно куда его засовывать, потому что так не стоит делать вообще. Вот сделали сущность без логики. И Transaction Script, в котором вся логика. И вдруг что-то из Transaction Script нам понадобилось где-то ещё? Как делает Anemic апологет? Создаёт Helper, выносит туда переиспользуемую логику, и использует её как внутри Transaction Script, так и в других слоях. А как нужно было сделать? Добавить логику в сущность и пользоваться ей везде, где сущность доступна. А что мешает делать не тупо "как в книге" или Anemic или Rich. А там где надо добавлять логику в сущность? Ну будет у вас в некоторых сущностях логика, кому от этого плохо-то будет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2013, 22:59:28 |
|
||
|
Что такое service layer?
|
|||
|---|---|---|---|
|
#18+
tumblerrr, ну дак тебе сказали все плюсы и минусы. А дальше уже пОварское искусство. Т.е. не делай "тупо" по Фаулеру) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2013, 23:19:06 |
|
||
|
Что такое service layer?
|
|||
|---|---|---|---|
|
#18+
забыл никКстати сделали core модуль используя Active Record, что-то среднее между анемик и рич, и знаете что? - палит! нет, я серьезно, как минимум половина логики реюзается. Допустим есть три приложения, все работают с Event. Так вот в core заимплеменчена record Event, и во всех трех проектах без единого изменения можно сделать Event.delete(), Event.findByMnemonic('HRAC') и тд - ништячок. Active Record это не рич, это просто другой способ организации доступа к базе, active record может прекрасно сочетаться и с Anemic, потому как генерируемые скажем springdata методы create/delete/findBy за логику считать врят ли можно. Active Record часто ассоциирует с Rich потому что он является необходимым условием для посторения rich, без него толстая модель не дееспособна в принципе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2013, 11:13:40 |
|
||
|
Что такое service layer?
|
|||
|---|---|---|---|
|
#18+
tumblerrrА что мешает делать не тупо "как в книге" или Anemic или Rich. А там где надо добавлять логику в сущность? Ну будет у вас в некоторых сущностях логика, кому от этого плохо-то будет? Ничего не мешает. Не теряйте нити разговора. Я выше объяснил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2013, 11:17:40 |
|
||
|
Что такое service layer?
|
|||
|---|---|---|---|
|
#18+
vimbaActive Record это не рич противоречие vimbaActive Record часто ассоциирует с Rich потому что он является необходимым условием ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2013, 11:18:52 |
|
||
|
Что такое service layer?
|
|||
|---|---|---|---|
|
#18+
vimbaActive Record часто ассоциирует с Rich потому что он является необходимым условием для посторения rich, без него толстая модель не дееспособна в принципе. Это не так. Вы делаете слишком безапеляционные заявления. Проблема в Rich модели на сервере в том что сущности тянут за собой зависимости от слоя persistence. И Фаулер предлагает решать эту проблему через паттерн Repository. Repository для каждого контекста может быть реальзован по-разному. Где-то читает из базы, где-то из локального кеша, где-то удаленным вызовом на сервер. Cама же организация Rich Domain Model к Active Record отношения не имеет. Active Record это просто способ организации доступа к данным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2013, 11:22:32 |
|
||
|
Что такое service layer?
|
|||
|---|---|---|---|
|
#18+
BlazkowiczvimbaСтранный вывод. Вывод вполне логичный. Просто ситуация с необходимостью переиспользования логики возникает не везде. Я не вижу чем переиспользование всякого хелпера или валидатора отличается от переиспользования метода находящегося в самой сущности. Вот преимущество хелпера вижу, код становится более высокакачественным, поробуйте посчитать метрику связности LCOM4 на типичной жирной энтите, получите не очень хороший результат так как она будет распадаться на несколько независимых групп, часть паблик методов будет работать с одним набором приватных полей, часть паблик методов с другими. На всё остальное отвечать просто не хочется, бред вызванный ООП головного мозга, Фаулера нужно меньше читать, а больше изучать практики доминирующие на платформе которой программируешь и настощих классиков ООП. Конечно сам Фаулер мужик то неплохой, он даже одну книжку бестселлер написал Рефакторинг , но вот его толкователи уже порядком достали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2013, 11:32:22 |
|
||
|
Что такое service layer?
|
|||
|---|---|---|---|
|
#18+
Фаулер тут совсем почти ни при чём. Инкапсуляция говорит, что поведение должно быть в объекте. А анемичная модель вынуждена))) разбивать объект на Данные - Record и обвязку в виде кучи библиотек или Помощников. Вы когда кашу манную едите, у вас есть помощники? vimbaЯ не вижу чем переиспользование всякого хелпера или валидатора отличается от переиспользования метода находящегося в самой сущности. Давайте по русски говорить что такое Хелпер и Валидатор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2013, 12:35:56 |
|
||
|
Что такое service layer?
|
|||
|---|---|---|---|
|
#18+
vimbaЯ не вижу чем переиспользование всякого хелпера или валидатора отличается от переиспользования метода находящегося в самой сущности. Бывает. Хелпер имеет набор параметров - не все параметры могут быть доступны в текущем контексте. Хелпер оперирует публичным контрактом объекта, но, обычно при этом зависит и от его внутренней реализации. Изменение которой влечет за собой каскадные изменения в хелперах. Внутри одного класса рефакторить и контролировать логику проще. Сам код тупо проще. Уже писал об этом выше. vimbaВот преимущество хелпера вижу, код становится более высокакачественным, Ни о чем. Нет такой характеристики кода - "высококачественный". "Переиспользуеймый", "слабо связаный" и т.п. - это характеристики кода. vimbaпоробуйте посчитать метрику связности LCOM4 на типичной жирной энтите, получите не очень хороший результат так как она будет распадаться на несколько независимых групп, часть паблик методов будет работать с одним набором приватных полей, часть паблик методов с другими. Нет такого понятия "типичной жирной сущности". Как я уже говорил выше, в Rich модели самое сложное это правильно распределять логику между классами (не только сущностями), чтобы связанность была минимальной как и в Anemic, но при этом логика была максимально переиспользуема, чего нет в Anemic. vimbaНа всё остальное отвечать просто не хочется, бред вызванный ООП головного мозга, Вы мало того что терминологией не владете так ещё и на личности переходите. Вы девушка? У девушек как аргументация заканчивается так сразу эмоции. vimbaФаулера нужно меньше читать, Правильно! Меньше книг - больше говнокода. vimbaа больше изучать практики доминирующие на платформе которой программируешь и настощих классиков ООП. Anemic Domain Model это доминирующая практика в Java? А Фаулер фальшивый классик? vimbaКонечно сам Фаулер мужик то неплохой, Знакомы лично? vimbaон даже одну книжку бестселлер написал Рефакторинг Вы не верно понимаете термин "бестселлер". Потому что он у Фаулера не один. vimba, но вот его толкователи уже порядком достали. Бедный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2013, 12:44:06 |
|
||
|
Что такое service layer?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Вы уже посчитали LCOM4 на своих жирных сущностях? Как посчитаете возвращайтесь продолжим разговор предметно оперируя цифрами, бла бла бла ни о чем, меня как-то мало интересует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2013, 13:49:22 |
|
||
|
Что такое service layer?
|
|||
|---|---|---|---|
|
#18+
vimbaВы уже посчитали LCOM4 на своих жирных сущностях? Да, уже убежал в слезах за линейкой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2013, 13:58:12 |
|
||
|
Что такое service layer?
|
|||
|---|---|---|---|
|
#18+
vimbaВы уже посчитали LCOM4 на своих жирных сущностях? Как посчитаете возвращайтесь продолжим разговор предметно оперируя цифрами, бла бла бла ни о чем, меня как-то мало интересует. Любопытно, на кой хер мерять LOCM4 на сущностях модели предметной области, если в них набор свойств диктуется самой предметной областью, а методы помещаются исключительно в соответствии с этим набором свойств? То есть, допустим, LCOM4 покажет что сущность можно разбить на несколько. Накой это нужно, если по логике предметной области она является монолитной? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2013, 14:08:57 |
|
||
|
Что такое service layer?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, да фигня это LOCM4 )). Забей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2013, 14:43:01 |
|
||
|
Что такое service layer?
|
|||
|---|---|---|---|
|
#18+
BlazkowiczvimbaВы уже посчитали LCOM4 на своих жирных сущностях? Как посчитаете возвращайтесь продолжим разговор предметно оперируя цифрами, бла бла бла ни о чем, меня как-то мало интересует. Любопытно, на кой хер мерять LOCM4 на сущностях модели предметной области Всё нужно считать нужно потому что по другому с людьми которым Фаулер выел мозг разговаривать нельзя, пока им не покажешь значения конкретных метрик и сводные индексы maintability они не успокоятся и будут продолжать пихать логику в энтити. Так как бы действует поговорка в своём отечестве пророков нет, они мнение неосилятора JEE Фаулера, ценят больше чем мнения людей из SUN, Oracle, IBM создавших платформу JEE на основе десятилетиями накопленного опыта разработки и главное поддержки интерпрайз систем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2013, 16:26:53 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38100077&tid=2130234]: |
0ms |
get settings: |
21ms |
get forum list: |
28ms |
check forum access: |
8ms |
check topic access: |
8ms |
track hit: |
51ms |
get topic data: |
22ms |
get forum data: |
5ms |
get page messages: |
116ms |
get tp. blocked users: |
3ms |
| others: | 327ms |
| total: | 589ms |

| 0 / 0 |
