Application Architecture for .NET: Applications & Services

IT IT
Здравствуйте, Ocenochka, Вы писали:

O> Очень хочется почитать основы, но не могу найти на русском. Чтобы подробно разжевывался этот рисунок:

http://files.rsdn.org/1/MSVision.gif

В книжке вроде же всё расписано. Не понятен сам рисунок или проблема именно в русском?

Давай я попробую дать свою версию нарисованному, остальные меня поправят.

UI Components

Грубо говоря – это контролы, набросанные на форму и логика их взаимодействия. Задача этого слоя – отобразить данные и принять ввод пользователя, произвести первичную валидацию вводимых данных, проверить правильность формата и обязательность ввода определённых полей. При наличии развитого фреймворка данный слой можно свести практически к тыканью мышкой по экрану и заполнению свойств соответствующих объектов. Когда ты создаёшь в студии форму WinForms или WebForms это как раз и есть этот самый слой.

User Process Components

Фактически этот слой реализует логику обработки данных на клиенте. Обычная последовательность разработки формы выглядит следующим образом:

  1. У сервера запрашиваются данные, которыми заполняется форма.
  2. Введённые пользователем данные собираются вместе, проверяются, возможно предварительно обрабатываются и отправляются серверу (в более простых случаях, передаются напрямую слою бизнес логики).

Если теперь мы вынесем в отдельный слой всё, что не касается самой формы непосредственно, то, как раз и получим то, что понимается под данным слоем. Логика обращения к серверу, очередная, более сложная валидация данных, некоторая предварительная обработка, кеширование данных на клиенте, всё это никак не зависит от того, какой пользовательский интерфейс используется, и, следовательно, может быть повторно использовано как между различными формами так и между различными типами интерфейсов.

Service Interfaces

Это фасад, видимая клиентам серверная часть, разрабатываемого приложения. Как правило, приложение имеет несколько сервисов, каждый из которых представляет собой одну логическую бизнес подсистему. Этот слой реализуется с помощью элементарного объявления необходимых интерфейсов. Никакой логики и прочего занудства. Просто декларация контракта между сервером и клиентами.

Кстати, термин фасад, который вводится в обсуждаемой книжке так в общем-то и не прижился. А жаль.

Есть в данной схеме одна небольшая нестыковочка. Если взять в качестве примера следующий интерфейс:

public interface PersonService
{
    Person GetPersonByID(int id);
}

то здесь мы увидим использование объекта Person, который относится на самом деле к Business Entities. По схеме же Business Entities у нас спрятаны за фасадом.

Business Workflows

Бизнес логика может быть простая, а может быть сложная. Что-то можно сделать в один шаг – получил, сосчитал, положил в базу данных, забыл. Что-то требует множества шагов, наличие состояний, логики переходов из одного состояния в другое и т.п.

Предположим, мы регистрируем заказ от нового заказчика. Занесение информации о заказчике в базу данных не требует сложной логики. Фамилия, адрес, рост, вес, имя любимой кошечки, всё это просто сохраняется во вновь созданном аккаунте. Но вот с самим заказом дело обстоит не так просто. Прежде чем товар дойдёт до клиента, он пройдёт через множество стадий, таких как резервирование, упаковка, оплата, отгрузка и пр. Возможно, придётся сделать дополнительную закупку у поставщиков, если товара нет на складе. А ещё возможно, что заказчик в самый последний момент захочет отменить заказ, либо же на его счету в банке элементарно не окажется денег. Вся подобная многоэтапная логика реализуется в данном слое, иногда с применением тяжелой артиллерии в виде дорогих серверов управления процессами. В частности Microsoft предлагает в качестве такого решения BizTalk Server Orchestration. А с выходом FW 3.0 мы получим бесплатное решение — WWF, по отзывам специалистов очень качественную реализацию Business Workflow.

Business Components

Собственно здесь реализуется логика приложения. Даже если используется какая-либо система управления процессами, то ей всё равно могут понадобиться компоненты, реализующие бизнес правила и выполняющие определённые бизнес задачи. Большая часть логики приложения должна реализовываться в этом слое. Но, естественно, без фанатизма. Например, вполне законным исключением могут быть толстые клиенты, которые, если используются, могут реализовывать большую часть логики. Тогда этот слой может быть частично перенесён на клианта или реализован в User Process Components. Серверная часть в этои случае превращается по сути в набор pass-throught методов. Впрочем, при согласованном дизайне можно добиться такого же и в случае с тонким клиентом.

Business Entities

Бизнес сущности, они же Domain Entities, они же Data Transfer Objects (DTO). Примитивные существа, которыми манипулируют и обмениваются между собой клиент и сервер. Обычно они представляют собой просто структуру данных, класс с набором свойств, XML сообщение. Datasets из пространства имён System.Data также относятся к бизнес сущностям, хотя и воображают себя маленькими базами данных.

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

Тем не менее, не смотря на свой примитивизм, Business Entities являются одной из важнейших частей приложения, т.к. они используются практически всеми слоями. В результате от простоты/сложности/запутанности их использования напрямую зависит простота/сложность/запутанность логики всего приложения.

Data Access Logic Components

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

Основная проблема связи приложения с базой данных посредством SQL заключается в том, что нам приходится работать с нетипизированными в терминах нашего приложения данными, приходящими из источника, и обращаться к ним, используя строковые имена или, в наиболее невменяемых случаях, порядковые номера. Что если нам понадобилось изменить, например, имя или тип поля любой объявленной в программе структуры? Даже если мы не приведём в соответствие остальные части приложения, то компилятор не даст нам ошибиться и покажет все места, где, по его мнению, мы не правы. В случае же с именами объектов базы данных всё совсем не так. К сожалению, здесь у нас нет такого помощника, и мы должны полагаться только на самих себя. Любые некорректные действия в данном случае не могут быть обнаружены в момент компиляции (compile time) и аукнутся нам лишь во время работы приложения (runtime). Следовательно, чем меньше у нас прямых мест обращения к базе данных и чем более они сконцентрированы в одном месте, тем меньше нас ожидает проблем в будущем при модификации и сопровождении нашего приложения.

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

Service Agents

По большому счёту эти компоненты ничем не отличаются от предыдущих. Разница лишь в том, что компоненты DAL извлекают данные из базы данных, а агенты сервисов делают то же самое по отношению к сервисам, предоставляемым нашей программе другими приложениями. Например, если нам необходимо читать данные из дружественных .NET Web сервисов или вызывать вражеские Java компоненты, то идея перевода полученных данных в формат нашего приложения вполне резонна.

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

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

Итого. Если в выше приведённой схеме объединить серенькие квадратики в один и сделать корректировку относительно Business Entities, то можно получить немного другую, более точную и, главное!, более симметричную картинку

http://www.rsdn.org:80/File/1/MyVision.gif

По-моему, стало похоже на первую версию Электроника
GlebZ
GlebZ Application Architecture for .NET: Applications & Ser
07.09.2006 08:37
Здравствуйте, IT, Вы писали:

IT>Кстати, термин фасад, который вводится в обсуждаемой книжке так в общем-то и не прижился. А жаль.

Кому как. У меня, лично, и много где вполне прижилось.

IT>Есть в данной схеме одна небольшая нестыковочка. Если взять в качестве примера следующий интерфейс:


IT>
IT>public interface PersonService
IT>{
IT>    Person GetPersonByID(int id);
IT>}
IT>

IT>то здесь мы увидим использование объекта Person, который относится на самом деле к Business Entities. По схеме же Business Entities у нас спрятаны за фасадом.

IT>Бизнес сущности, они же Domain Entities, они же Data Transfer Objects (DTO).

В данном случае они вполне правы. Точнее могут быть вполне правы. Entities, которые работают внутри бизнес-логики сервера, и DTO, возвращаемые клиенту, могут сильно различаться как по формату (DTO — xml, Entities — объекты), так и по содержимому. Например в Entities содержатся секретные поля которые ни в коем случае не должны попадать, либо редактироваться клиентом. Или клиент может сам заказывать себе DTO, например с помощью нетипизированного DataSet, в то же время внутренняя логика должна оперировать полным состоянием entities. Вобщем тут сильно зависит от решения — есть ли явная трансформация из Entities в DTO или оного нет.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
IT
IT
07.09.2006 12:07
Здравствуйте, GlebZ, Вы писали:

IT>>Бизнес сущности, они же Domain Entities, они же Data Transfer Objects (DTO).

GZ>В данном случае они вполне правы. Точнее могут быть вполне правы. Entities, которые работают внутри бизнес-логики сервера, и DTO, возвращаемые клиенту, могут сильно различаться как по формату (DTO — xml, Entities — объекты), так и по содержимому. Например в Entities содержатся секретные поля которые ни в коем случае не должны попадать, либо редактироваться клиентом. Или клиент может сам заказывать себе DTO, например с помощью нетипизированного DataSet, в то же время внутренняя логика должна оперировать полным состоянием entities. Вобщем тут сильно зависит от решения — есть ли явная трансформация из Entities в DTO или оного нет.

Вот что они сами говорят об этом:

8. Business entity components: Most applications require data to be passed between components. For example, in the retail application a list of products must be passed from the data access logic components to the user interface components so that the product list can be displayed to the users. The data is used to represent real-world business entities, such as products or orders. The business entities that are used internally in the application are usually data structures, such as DataSets, DataReaders, or Extensible Markup Language (XML) streams, but they can also be implemented using custom object-oriented classes that represent the real-world entities your application has to work with, such as a product or an order.

... << RSDN@Home 1.2.0 alpha rev. 0>>
GlebZ
GlebZ
07.09.2006 01:06
Здравствуйте, IT, Вы писали:

IT>Вот что они сами говорят об этом:


IT>

IT>8. Business entity components: Most applications require data to be passed between components. For example, in the retail application a list of products must be passed from the data access logic components to the user interface components so that the product list can be displayed to the users. The data is used to represent real-world business entities, such as products or orders. The business entities that are used internally in the application are usually data structures, such as DataSets, DataReaders, or Extensible Markup Language (XML) streams, but they can also be implemented using custom object-oriented classes that represent the real-world entities your application has to work with, such as a product or an order.

Кое что подчеркнул. У меня вызывает недоумение о возможности переноса DataReader через презентационный уровень на другую машину. Но фактически, не каждые данные могут быть перенесены в первозданном виде между процессами. Наиболее показательны Web сервиса. В самом web-сервисе бизнес-объект может иметь конкретный инстанс, в то же время, передать клиенту можно только в форме SOA сообщения(где может быть и состояние передается не полностью а только public). Собственно поэтому у нас обычно подразделяют bisness entities, работающие внутри бизнес-логики серверов, и DTO — данные которые могут быть перенесены на компьютер клиентов. Сущность при этом — одна и та же. При этом клиент вполне может заказать себе DTO — определенного вида(ну например какие-то поля не нужны). Фактически — DTO это функциональность фасадного уровня. Явно ли она сделана, или неявно(например сериализация) — это уже второй вопрос.
ЗЫ
Интересно. Та статья была к FW 1. И пропогандировались методы FW 1. Сейчас нашел аналогичный абзац, но только в более корректной форме.

Business entity components: Most applications require data to be passed between components. For example, in the retail application a list of products must be passed from the data access logic components to the user interface components, so that the product list can be displayed to the users. The data is used to represent real world business entities, such as products or orders. The business entities that are used internally in the application are usually data structures provided by the platform, but they could also be implemented using custom object-oriented classes that represent the real world entities that applications have to deal with, such as a product or an order.

... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
IT
IT
07.09.2006 05:33
Здравствуйте, GlebZ, Вы писали:

GZ>Кое что подчеркнул. У меня вызывает недоумение о возможности переноса DataReader через презентационный уровень на другую машину.


Это похоже на явный косяк.

GZ>Фактически — DTO это функциональность фасадного уровня. Явно ли она сделана, или неявно(например сериализация) — это уже второй вопрос.


Честно говоря, я предпочитаю с этим не заморачиваться. DTO, не DTO, называйте как хотите. Передавать я буду то и в том формате, в котором мне удобно для каждой конкретной задачи. В большинстве случаев, предпочитаю использовать одни и те же объекты как на клиенте, так и на сервере. Причина банальна — не хочу делать двойную работу.
GlebZ
GlebZ
07.09.2006 01:18
Здравствуйте, IT, Вы писали:

Напоследок, определения DTO
Microsoft
Фаулер(он, кажется, первым его описал как паттерн).


С уважением, Gleb.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Gollum
Gollum Application Architecture for .NET: Applications & Ser
07.09.2006 09:42
Здравствуйте, IT, Вы писали:

IT>http://www.rsdn.org:80/File/1/MyVision.gif


Супер, я всегда не понимал почему в книжках DTO не рисуют как у тебя.

IT>По-моему, стало похоже на первую версию Электроника


"Ури! Где же у него все-таки кнопка?!" (с)
Кто людям помогает, тот тратит время зря. Хорошими делами прославиться нельзя!
Ocenochka
Ocenochka Application Architecture for .NET: Applications & Ser
07.09.2006 02:30
IT>В книжке вроде же всё расписано. Не понятен сам рисунок или проблема именно в русском?

Проблема в русском. Такие термины тяжело переводить с помощью эл. словаря.

IT>Давай я попробую дать свою версию нарисованному, остальные меня поправят.


Огромное спасибо! Очень приятно в начале своего самостоятельно обучения получить вот такой вот компактный взгляд сверху, типа RoadMap.

IT>UI Components

IT>User Process Components
IT>Service Interfaces

IT>Кстати, термин фасад, который вводится в обсуждаемой книжке так в общем-то и не прижился. А жаль.


А что за книжка? Я ссылку на Guide давал. Есть на английском книжка?

IT>Business Workflows


[skip]

IT>Вся подобная многоэтапная логика реализуется в данном слое, иногда с применением тяжелой артиллерии в виде дорогих серверов управления процессами. В частности Microsoft предлагает в качестве такого решения BizTalk Server Orchestration. А с выходом FW 3.0 мы получим бесплатное решение — WWF, по отзывам специалистов очень качественную реализацию Business Workflow.


Спасибо! Нашел тут описание этого зверя.

IT>Business Components


Не понятно, чем отличается Business Components от Business Workflows. Можно конкретный пример того, как выглядят Business Workflows и Business Components?

IT>Business Entities


IT>Бизнес сущности, они же Domain Entities, они же Data Transfer Objects (DTO). Примитивные существа, которыми манипулируют и обмениваются между собой клиент и сервер. Обычно они представляют собой просто структуру данных, класс с набором свойств, XML сообщение. Datasets из пространства имён System.Data также относятся к бизнес сущностям, хотя и воображают себя маленькими базами данных.

IT>Обычно Business Entities не реализуют никакой логики кроме базовой валидации, операций, облегчающих навигацию по полям объектов и некоторых несложных вычислительных расчётов, не требующих вовлечения внешних объектов.
IT>Тем не менее, не смотря на свой примитивизм, Business Entities являются одной из важнейших частей приложения, т.к. они используются практически всеми слоями. В результате от простоты/сложности/запутанности их использования напрямую зависит простота/сложность/запутанность логики всего приложения.

Т.е. это объектная обертка данных? Например, класс Person?

Таким образом получается, что Business Components — участники Business Workflows, оперирующие Business Entities?

IT>Data Access Logic Components

IT>Service Agents
IT>Серые прямоугольники на рисунке представляют собой группу компонент, входящую во фреймворк приложения и реализующую различные вспомогательные сервисы, как правило, не имеющие отношения к бизнес логике. К таким объектам относятся компоненты обеспечивающие аутентификацию и авторизацию пользователей, журналирование различных событий, взаимодействия подсистем и т.п.
IT>Фактически фреймворк – это ещё одна большая и ответственная часть приложения, которая состоит не только из программных компонентов, то так же и соглашений и правил, регулирующих сам процесс разработки.
IT>Итого. Если в выше приведённой схеме объединить серенькие квадратики в один и сделать корректировку относительно Business Entities, то можно получить немного другую, более точную и, главное!, более симметричную картинку

IT>http://www.rsdn.org:80/File/1/MyVision.gif

IT>По-моему, стало похоже на первую версию Электроника
IT
IT
07.09.2006 06:10
Здравствуйте, Ocenochka, Вы писали:

O> А что за книжка? Я ссылку на Guide давал. Есть на английском книжка?


По твоей ссылке можно скачать pdf-файл, который представляет собой электронную версию небольшой книжки.

O> Не понятно, чем отличается Business Components от Business Workflows. Можно конкретный пример того, как выглядят Business Workflows и Business Components?


По сути и то и другое является бизнес логикой. Business Workflows отличается большей сложностью и, скажем так, многоэтапностью и событийностью. Например, возьмём мой пример с заказом товара. Если задача сводится к приёму заказа, немедленному снятию денег со счёта клиента и отправлению ордера на отгрузку, а в случае неудачи клиенту сообщается, что мол не смогла, то такую логику можно оформить как одну операцию, о которой сразу же можно забыть. Теперь немного усложним задачу. Например, введём требование, что если товара на складе нет, то мы откладываем отгрузку до момента его получения. Определённый товар может заказываться партиями и нам нужно просто подождать. Другой товар надо заказывать индивидуально. Третий вообще переоформляется на производителя. Нафантазировать можно много чего.

В результате, выполняемая операция становится не просто последовательностью действий, а довольно ветвистой последовательностью да ещё и распределённой во времени. Так, например, между операцией принять заказ и оправить товар может пройти пара недель. Для того что бы это всё работало в приложение нужно вводить такие вещи, как состояние заказа на определённый период, отслеживать некоторые события вроде появления товара на складе и т.п. Всё это конечно можно сделать и без специальных средств, но рано или поздно ты изобретёшь велосипед, который известен в народе под названием Business Workflow.

Готовые системы workflow позволяют существенно упростить выполнение данной задачи. От программиста требуется реализация только элементарных операций, вроде послать клиенту e-mail об отгрузке. Отслеживание состояний и событий, реализацию логики переходов и проверок такие системы берут на себя.

IT>>Business Entities


O> Т.е. это объектная обертка данных? Например, класс Person?


Можно и так сказать.

O> Таким образом получается, что Business Components — участники Business Workflows, оперирующие Business Entities?


Business Components не обязательно являются участниками Business Workflows. Эти вещи могут взаимодействовать, но никак друг от друга не зависят. Более того, или того или другого может не быть в приложении вообще. Это всё вместе и есть бизнес логика, и на схеме это могло бы быть отображено одним квадратом. Просто авторы книжки решили, подчеркнуть и разделить эти вещи.
Ocenochka
Ocenochka
08.09.2006 09:25
IT>По твоей ссылке можно скачать pdf-файл, который представляет собой электронную версию небольшой книжки.

Вот бы такую книгу на русском!

O>> Не понятно, чем отличается Business Components от Business Workflows. Можно конкретный пример того, как выглядят Business Workflows и Business Components?


IT>По сути и то и другое является бизнес логикой. Business Workflows отличается большей сложностью и, скажем так, многоэтапностью и событийностью. Например, возьмём мой пример с заказом товара. Если задача сводится к приёму заказа, немедленному снятию денег со счёта клиента и отправлению ордера на отгрузку, а в случае неудачи клиенту сообщается, что мол не смогла, то такую логику можно оформить как одну операцию, о которой сразу же можно забыть. Теперь немного усложним задачу. Например, введём требование, что если товара на складе нет, то мы откладываем отгрузку до момента его получения. Определённый товар может заказываться партиями и нам нужно просто подождать. Другой товар надо заказывать индивидуально. Третий вообще переоформляется на производителя. Нафантазировать можно много чего.


IT>В результате, выполняемая операция становится не просто последовательностью действий, а довольно ветвистой последовательностью да ещё и распределённой во времени. Так, например, между операцией принять заказ и оправить товар может пройти пара недель. Для того что бы это всё работало в приложение нужно вводить такие вещи, как состояние заказа на определённый период, отслеживать некоторые события вроде появления товара на складе и т.п. Всё это конечно можно сделать и без специальных средств, но рано или поздно ты изобретёшь велосипед, который известен в народе под названием Business Workflow.


А где тут Business Components и Business Workflows?
Business Workflow — это и есть вся бизнес логика, которая периодически обращается к Business Components для того, чтобы произвести какие-то действия с Business Entities?

IT>Готовые системы workflow позволяют существенно упростить выполнение данной задачи. От программиста требуется реализация только элементарных операций, вроде послать клиенту e-mail об отгрузке. Отслеживание состояний и событий, реализацию логики переходов и проверок такие системы берут на себя.


А в контексте WWF что является Business Components и Business Entities? Я так понял, что activities обращаются к Business Components, которые оперируют Business Entities?

IT>>>Business Entities

IT>Business Components не обязательно являются участниками Business Workflows. Эти вещи могут взаимодействовать, но никак друг от друга не зависят.

Получается, что Service Interfaces может обращаться и к Business Workflows, и к Business Components? Это зависит от типа запроса UI Process Components?

IT>Более того, или того или другого может не быть в приложении вообще.


Может совсем не быть Business Workflows? Даже в виде самописного велосипеда? Мне казалось, что Business Workflows — это бизнес-потоки. Не важно какие. Сами их писали или нет... А вот что такое Business Components...

IT>Это всё вместе и есть бизнес логика, и на схеме это могло бы быть отображено одним квадратом. Просто авторы книжки решили, подчеркнуть и разделить эти вещи.


Т.е. все вместе бизнес логика? А в каких отношениях между собой находятся эти три состоавные части?

зы Благодарю за терпение в объяснении
IT
IT
08.09.2006 01:52
Здравствуйте, Ocenochka, Вы писали:

IT>>В результате, выполняемая операция становится не просто последовательностью действий, а довольно ветвистой последовательностью да ещё и распределённой во времени. Так, например, между операцией принять заказ и оправить товар может пройти пара недель. Для того что бы это всё работало в приложение нужно вводить такие вещи, как состояние заказа на определённый период, отслеживать некоторые события вроде появления товара на складе и т.п. Всё это конечно можно сделать и без специальных средств, но рано или поздно ты изобретёшь велосипед, который известен в народе под названием Business Workflow.


O> А где тут Business Components и Business Workflows?


Упрощённо можно сказать, что до того как мы ввели состояние заказа и разнесли выполнение операции во времени — это было Business Components. После этого стало Business Workflows. Но это разделение условное.

O> Business Workflow — это и есть вся бизнес логика, которая периодически обращается к Business Components для того, чтобы произвести какие-то действия с Business Entities?


Обрати внимание, на рисунке это два равноправных квадрата. Они могут взаимодействовать, но не являются в подчинении друг у друга. Business Workflow — это способ решать более сложные бизнес задачи. Т.е. эти задачи обладают рядом схожих характеристик и паттернов, то их можно выделить в отдельный класс и можно для них создать более высокоуровневые средства разработки, такие как BizTalk Server и WWF.

O> А в контексте WWF что является Business Components и Business Entities? Я так понял, что activities обращаются к Business Components, которые оперируют Business Entities?


WWF тоже может оперировать BE. А Business Components могут передавать управление WWF. Не надо искать здесь причинноследственных связей и выстраивать иерархий подчинения. Это только усложнит и запутает понимание в общем-то довольно простых вещей. В зависимости от задачи она может быть польностью построена на WWF, либо полностью на бизнес компонентах, либо на разумной комбинации и того и другого.

O> Получается, что Service Interfaces может обращаться и к Business Workflows, и к Business Components? Это зависит от типа запроса UI Process Components?


Правильно.

O> Может совсем не быть Business Workflows? Даже в виде самописного велосипеда? Мне казалось, что Business Workflows — это бизнес-потоки. Не важно какие. Сами их писали или нет... А вот что такое Business Components...


public class PersonManager
{
    public Person GetPersonByID(int id)
    {
        return DataAccessor.GetPersonByID(id);
    }
}


Вот это и есть компонент бизнес логики.

O> Т.е. все вместе бизнес логика? А в каких отношениях между собой находятся эти три состоавные части?


Боюсь, что без попытки написать какое-нибудь простое приложение это трудно будет объяснить. А для простого приложения привлекать тяжёлую артиллерию в виде Business Workflows нет никакого смысла.
Ocenochka
Ocenochka
11.09.2006 07:54
Подвожу итог.

Business Workflows — сложный процесс, обеспечивающий работу всей бизнес-логики.
Business Components — компоненты, которые могут обеспечивать всю бизнес-логику, а могут помогать Business Workflows и являтся частью Business Workflows.
Business Entities — обертки вокруг голых данных для манипулирования данными как объектами в контексте решения.

Все правильно?
IT
IT
11.09.2006 12:21
Здравствуйте, Ocenochka, Вы писали:

O>Business Workflows — сложный процесс, обеспечивающий работу всей бизнес-логики.

O>Business Components — компоненты, которые могут обеспечивать всю бизнес-логику, а могут помогать Business Workflows и являтся частью Business Workflows.
O>Business Entities — обертки вокруг голых данных для манипулирования данными как объектами в контексте решения.

O>Все правильно?


Если убрать категоричное "всё", то правильно.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Ocenochka
Ocenochka
11.09.2006 12:23
O>>Business Workflows — сложный процесс, обеспечивающий работу всей бизнес-логики.
O>>Business Components — компоненты, которые могут обеспечивать всю бизнес-логику, а могут помогать Business Workflows и являтся частью Business Workflows.
O>>Business Entities — обертки вокруг голых данных для манипулирования данными как объектами в контексте решения.
O>>Все правильно?
IT>Если убрать категоричное "всё", то правильно.

А что из этого "всего" неправильно? А то у меня так и осталось ощущение недопонимания.
vse_ravno_ya_budu_anonim
vse_ravno_ya_budu_anonim Application Architecture for .NET: Applications & Ser
08.09.2006 01:40
Здравствуйте, IT, Вы писали:

IT>UI Components


IT>Грубо говоря – это контролы, набросанные на форму и логика их взаимодействия. Задача этого слоя – отобразить данные и принять ввод пользователя, произвести первичную валидацию вводимых данных, проверить правильность формата и обязательность ввода определённых полей. При наличии развитого фреймворка данный слой можно свести практически к тыканью мышкой по экрану и заполнению свойств соответствующих объектов. Когда ты создаёшь в студии форму WinForms или WebForms это как раз и есть этот самый слой.


Вот и нет. Проверка вводимых данных, правильность формата и обязательность ввода — забота совсем другой части. Попробуй-ка в твоем случае вынести функционал в консольное ПО и получишь дублирование кода.
GlebZ
GlebZ
08.09.2006 02:30
Здравствуйте, vse_ravno_ya_budu_anonim, Вы писали:

___>Вот и нет. Проверка вводимых данных, правильность формата и обязательность ввода — забота совсем другой части. Попробуй-ка в твоем случае вынести функционал в консольное ПО и получишь дублирование кода.

Нет. Не получишь. В случае UI ты проверяешь корректность заполнения формы. А формы даже на одной платформе могут заполнять один и тот-же бизнес-объект по разному. В случае разных платформ, то разница форм еще выше. Бизнес-компоненты проверяют корректность приходящих данных, независимо от форм(о которых он обычно и не догадывается).
IT
IT
08.09.2006 02:49
Здравствуйте, vse_ravno_ya_budu_anonim, Вы писали:

___>Вот и нет. Проверка вводимых данных, правильность формата и обязательность ввода — забота совсем другой части.


Валидация более сложный процесс, чем может показаться на первый взгляд.

___>Попробуй-ка в твоем случае вынести функционал в консольное ПО и получишь дублирование кода.


Вовсе не обязательно. Правила валидации могут быть помещены, например, декларативно в Business Entity, в этом случае дублирования не будет.