powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Слои (MVVM, MVC и т. п.) - каждый слой в отдельной сборке?
25 сообщений из 25, страница 1 из 1
Слои (MVVM, MVC и т. п.) - каждый слой в отдельной сборке?
    #38851173
НемоКэп42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот есть у меня слой модели, содержащий бизнес-логику. Есть слой клиента, содержащий логику интерфейса для десктопа. Может быть ещё слой клиента, содержащий логику интерфейса для веба или телефона. Все эти слои - в отдельных сборках, т. к. фактически представляют из себя: клиенсткие слои - это клиентские приложения с UI и т. п., а слой бизнес-логики - DLL, чтобы можно было запустить его на любом клиенстком устройстве, если понадобиться, или отдать службе на сервере, или ещё что-нибудь.

Есть набор данных, которыми будут обмениваться слои. Он должен быть общим для них. Какой лучший способ это сделать?

Я пока придумал сделать отдельную сборку (DLL), в которой будет описан класс этих общих данных и на которую нужно сослаться (через references) каждому проекту других слоёв.
...
Рейтинг: 0 / 0
Слои (MVVM, MVC и т. п.) - каждый слой в отдельной сборке?
    #38851181
НемоКэп42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и вообще, как я понимаю, правило такое: если хочешь расшарить код между несколькими проектами, но при этом не нести в эти проекты другой код, не связанный с расшариваемым, то выноси этот расшариваемый код в отдельную сборку. Да?
...
Рейтинг: 0 / 0
Слои (MVVM, MVC и т. п.) - каждый слой в отдельной сборке?
    #38851192
Фотография EDUARD SAPOTSKI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НемоКэп42Ну и вообще, как я понимаю, правило такое: если хочешь расшарить код между несколькими проектами, но при этом не нести в эти проекты другой код, не связанный с расшариваемым, то выноси этот расшариваемый код в отдельную сборку. Да?
Теоретически да, на практике - как получится.
...
Рейтинг: 0 / 0
Слои (MVVM, MVC и т. п.) - каждый слой в отдельной сборке?
    #38851193
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НемоКэп42Вот есть у меня слой модели, содержащий бизнес-логику. Есть слой клиента, содержащий логику интерфейса для десктопа. Может быть ещё слой клиента, содержащий логику интерфейса для веба или телефона. Все эти слои - в отдельных сборках, т. к. фактически представляют из себя: клиенсткие слои - это клиентские приложения с UI и т. п., а слой бизнес-логики - DLL, чтобы можно было запустить его на любом клиенстком устройстве, если понадобиться, или отдать службе на сервере, или ещё что-нибудь.

Есть набор данных, которыми будут обмениваться слои. Он должен быть общим для них. Какой лучший способ это сделать?

Я пока придумал сделать отдельную сборку (DLL), в которой будет описан класс этих общих данных и на которую нужно сослаться (через references) каждому проекту других слоёв.Обычно создаётся проект Business.DomainModel, что собирается в MyApplication.Business.DomainModel.dll и туда вынесятся сущности предметной области.

Какой ещё набор данных Вам нужен? DTO объекты сериализуемые в XML/JSON? Для каких слоёв они будут общими?
...
Рейтинг: 0 / 0
Слои (MVVM, MVC и т. п.) - каждый слой в отдельной сборке?
    #38851194
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НемоКэп42Ну и вообще, как я понимаю, правило такое: если хочешь расшарить код между несколькими проектами, но при этом не нести в эти проекты другой код, не связанный с расшариваемым, то выноси этот расшариваемый код в отдельную сборку. Да?

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

И на общую архитектуру влияет весьма положительным образом.
...
Рейтинг: 0 / 0
Слои (MVVM, MVC и т. п.) - каждый слой в отдельной сборке?
    #38851196
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НемоКэп42Ну и вообще, как я понимаю, правило такое: если хочешь расшарить код между несколькими проектами, но при этом не нести в эти проекты другой код, не связанный с расшариваемым, то выноси этот расшариваемый код в отдельную сборку. Да?Если я Вас правильно понял, то да.

Например если Вы в качестве источника данных используете SQL Server, то инжектите реализацию репозитория (стратегии репозитория) из сборки MyApplication.Data.SqlServer.dll.
А если в качестве источника данных выступает soap сервис, то инжектите реализацию из сборки MyApplication.Web.SoapGateway.dll.

Но при этом MyApplication.Business.DomainModel.dll цепляется и там, и там. Так как любая реализация репозитория возвращает набор доменных объектов.
...
Рейтинг: 0 / 0
Слои (MVVM, MVC и т. п.) - каждый слой в отдельной сборке?
    #38851280
НемоКэп42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAНемоКэп42Вот есть у меня слой модели, содержащий бизнес-логику. Есть слой клиента, содержащий логику интерфейса для десктопа. Может быть ещё слой клиента, содержащий логику интерфейса для веба или телефона. Все эти слои - в отдельных сборках, т. к. фактически представляют из себя: клиенсткие слои - это клиентские приложения с UI и т. п., а слой бизнес-логики - DLL, чтобы можно было запустить его на любом клиенстком устройстве, если понадобиться, или отдать службе на сервере, или ещё что-нибудь.

Есть набор данных, которыми будут обмениваться слои. Он должен быть общим для них. Какой лучший способ это сделать?

Я пока придумал сделать отдельную сборку (DLL), в которой будет описан класс этих общих данных и на которую нужно сослаться (через references) каждому проекту других слоёв.Обычно создаётся проект Business.DomainModel, что собирается в MyApplication.Business.DomainModel.dll и туда вынесятся сущности предметной области.

Какой ещё набор данных Вам нужен? DTO объекты сериализуемые в XML/JSON? Для каких слоёв они будут общими?
Этот "общий набор данных" - это то, что должна отдавать доменная модель клиентам. Но сейчас я подумал и решил, что для разных клиентов это будут разные наборы данных. Хотя бы разграниченные по уровню доступа: разработчикам всё подробно с логами на каждое действие, другим разработчикам - подробно без логов, а клиентам - неподробно и тоже без логов. Но при этом генерить эти разные "ответы" должна серверная часть. Как это лучше сделать?

Я так понимаю, что надо создать сборку с разными типами результатов - по типу на каждый тип клиента. Так?
...
Рейтинг: 0 / 0
Слои (MVVM, MVC и т. п.) - каждый слой в отдельной сборке?
    #38851282
НемоКэп42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НемоКэп42skyANAпропущено...
Обычно создаётся проект Business.DomainModel, что собирается в MyApplication.Business.DomainModel.dll и туда вынесятся сущности предметной области.

Какой ещё набор данных Вам нужен? DTO объекты сериализуемые в XML/JSON? Для каких слоёв они будут общими?
Этот "общий набор данных" - это то, что должна отдавать доменная модель клиентам. Но сейчас я подумал и решил, что для разных клиентов это будут разные наборы данных. Хотя бы разграниченные по уровню доступа: разработчикам всё подробно с логами на каждое действие, другим разработчикам - подробно без логов, а клиентам - неподробно и тоже без логов. Но при этом генерить эти разные "ответы" должна серверная часть. Как это лучше сделать?

Я так понимаю, что надо создать сборку с разными типами результатов - по типу на каждый тип клиента. Так?
Серверное приложение устроено так, что оно получает от клиента данные и делает по ним расчёт. Наиболее полные результаты расчёта хранятся на сервере, а разные их (результатов) обрезанные комбинации надо пересылать клиентам в соответствии с типом этих клиентов.
...
Рейтинг: 0 / 0
Слои (MVVM, MVC и т. п.) - каждый слой в отдельной сборке?
    #38851283
НемоКэп42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НемоКэп42НемоКэп42пропущено...

Этот "общий набор данных" - это то, что должна отдавать доменная модель клиентам. Но сейчас я подумал и решил, что для разных клиентов это будут разные наборы данных. Хотя бы разграниченные по уровню доступа: разработчикам всё подробно с логами на каждое действие, другим разработчикам - подробно без логов, а клиентам - неподробно и тоже без логов. Но при этом генерить эти разные "ответы" должна серверная часть. Как это лучше сделать?

Я так понимаю, что надо создать сборку с разными типами результатов - по типу на каждый тип клиента. Так?
Серверное приложение устроено так, что оно получает от клиента данные и делает по ним расчёт. Наиболее полные результаты расчёта хранятся на сервере, а разные их (результатов) обрезанные комбинации надо пересылать клиентам в соответствии с типом этих клиентов.
Ну, под серверным приложением я тут как раз и понимаю сборку доменной логики. То, что она работает на сервере - частный случай.
...
Рейтинг: 0 / 0
Слои (MVVM, MVC и т. п.) - каждый слой в отдельной сборке?
    #38851284
НемоКэп42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т. е. результаты вроде бы соотносятся с клиентами, но генериться должны на сервере. При этом доменной логике всё равно на результаты - она не должна зависеть от того, кому она отдаёт эти результаты. Она только делает расчёте в предметной области. Поэтому я хочу вынести набор типов с результатами в отдельную сборку, чтобы эти типы результатов не зависели ни от клиентских сборок, ни от сборки доменной логики.
...
Рейтинг: 0 / 0
Слои (MVVM, MVC и т. п.) - каждый слой в отдельной сборке?
    #38851288
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НемоКэп42Поэтому я хочу вынести набор типов с результатами в отдельную сборку, чтобы эти типы результатов не зависели ни от клиентских сборок, ни от сборки доменной логики.

Обычно подобные разделяемые типы выносят в отдельную сборку типа SomeName.Shared.dll, которая сама ни от кого больше не зависит, но все ссылаются на неё. Хорошо для IoC.
...
Рейтинг: 0 / 0
Слои (MVVM, MVC и т. п.) - каждый слой в отдельной сборке?
    #38851303
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НемоКэп42Т. е. результаты вроде бы соотносятся с клиентами, но генериться должны на сервере. При этом доменной логике всё равно на результаты - она не должна зависеть от того, кому она отдаёт эти результаты. Она только делает расчёте в предметной области. Поэтому я хочу вынести набор типов с результатами в отдельную сборку, чтобы эти типы результатов не зависели ни от клиентских сборок, ни от сборки доменной логики.С точки зрения предметной области, что такое результаты?
Расчёты у Вас лежат в предметной области (DomainModel), а результаты нет? :) Зачем Вы собрались их выносить куда-то?

Можете привести конкретный пример клиента и того, что ему требуется?
...
Рейтинг: 0 / 0
Слои (MVVM, MVC и т. п.) - каждый слой в отдельной сборке?
    #38851306
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAРасчёты у Вас лежат в предметной области (DomainModel), а результаты нет? :) Зачем Вы собрались их выносить куда-то?

Речь идёт наверное о типах результатов, кортежей, интерфейсах.
...
Рейтинг: 0 / 0
Слои (MVVM, MVC и т. п.) - каждый слой в отдельной сборке?
    #38851321
НемоКэп42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я немного запутался. Сейчас постараюсь привести всё в порядок.

Клиентский слой может передавать данные для расчёта. Доменная логика делает расчёт по этим данным. Результаты расчёта доменная логика хранит у себя (в ОЗУ или пишет в БД - неважно). Но часть расчётов должна отдать клиенту. В зависимости от типа клиента, это будут разные части результатов, включая вариант "все результаты полностью" (но это для разработчиков для анализов в основном).

Результаты представляют собой коллекции данных разных типов (int, double, string), просто данные разных типов (int, double, string).

Мне надо решить, какому клиенту отдать какой набор результатов. Но я хочу, чтобы эта задача решалась вне доменной логики. Я пока рассматриваю вариант, что сборка с доменной логикой будет располагаться на сервере, и на этом же сервере будет крутиться приложение-служба WCF, которая и будет решать, каким клиентам что отдавать.

Но, и клиенты, и эта служба должны знать, что за набор результатов они получат. Эти разные наборы результатов будут представлять из себя классы результатов - типа ClientResults, DeveloperResults и т. п.

Чтобы и клиентские приложения, и служба знали про эти классы результатов, но не знали про логику друг друга (общение через сериализацию классов результатов - как это WCF делает), нужно эти классы результатов вынести в отдельную сборку и сделать ссылку на эту сборку из службы и из клиентских приложений.

Итого:

- отдельная сборка для доменной логики (ДЛ);
- отдельные сборки для каждого типа клиентов (К);
- отдельная сборка для классов результатов (Р) - соответствующих типам клиентов;
- отдельная сборка для службы (С).

Вот как я вижу отношения между этими сборками: (см. рисунок)

Т. е. результаты и доменная логика автономны и ни от кого не зависят.
...
Рейтинг: 0 / 0
Слои (MVVM, MVC и т. п.) - каждый слой в отдельной сборке?
    #38851323
НемоКэп42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здесь не отражено, как доменная логика хранит результаты - это не "Р", а некоторый свой тип данных, хранящий наиболее полные результаты. А "Р" - это сборка с типами "обрезанных" результатов для разных типов клиентов.
...
Рейтинг: 0 / 0
Слои (MVVM, MVC и т. п.) - каждый слой в отдельной сборке?
    #38851325
НемоКэп42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НемоКэп42Но часть расчётов должна отдать клиенту.
Не расчётов, а результатов расчёта, конечно же.
...
Рейтинг: 0 / 0
Слои (MVVM, MVC и т. п.) - каждый слой в отдельной сборке?
    #38851326
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НемоКэп42, зачем Р отделять от К ?
...
Рейтинг: 0 / 0
Слои (MVVM, MVC и т. п.) - каждый слой в отдельной сборке?
    #38851327
НемоКэп42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добавил отношение сборок к серверной и клиентской частям.
...
Рейтинг: 0 / 0
Слои (MVVM, MVC и т. п.) - каждый слой в отдельной сборке?
    #38851329
НемоКэп42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAНемоКэп42, зачем Р отделять от К ?
Классы Р будут формироваться в службе, затем сериализовываться и передаваться клиентам. Клиент десериализует эти данные. Т. е. и служба, и клиенты должны знать, как десериализовывать такие данные - т. е. должны иметь код классов Р.

Возможно, чтобы разные клиенты не знали об устройстве данных для других клиентов, нужно каждый тип результата выделить в отдельную сборку, соответствующую типу клиента - Р1, Р2 и т. д.?
...
Рейтинг: 0 / 0
Слои (MVVM, MVC и т. п.) - каждый слой в отдельной сборке?
    #38851330
НемоКэп42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НемоКэп42skyANAНемоКэп42, зачем Р отделять от К ?
Классы Р будут формироваться в службе, затем сериализовываться и передаваться клиентам. Клиент десериализует эти данные. Т. е. и служба, и клиенты должны знать, как десериализовывать такие данные - т. е. должны иметь код классов Р.

Возможно, чтобы разные клиенты не знали об устройстве данных для других клиентов, нужно каждый тип результата выделить в отдельную сборку, соответствующую типу клиента - Р1, Р2 и т. д.?

Если я помещю Р1 в К1, Р2 в К2 и т. д., то как мне сослаться на Р из С? Для этого надо будет сделать ссылку из С на К, а К уже имеет ссылку на С. А циклические ссылки между проектами делать нельзя.
...
Рейтинг: 0 / 0
Слои (MVVM, MVC и т. п.) - каждый слой в отдельной сборке?
    #38851331
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НемоКэп42skyANAНемоКэп42, зачем Р отделять от К ?
Классы Р будут формироваться в службе, затем сериализовываться и передаваться клиентам. Клиент десериализует эти данные. Т. е. и служба, и клиенты должны знать, как десериализовывать такие данные - т. е. должны иметь код классов Р.

Возможно, чтобы разные клиенты не знали об устройстве данных для других клиентов, нужно каждый тип результата выделить в отдельную сборку, соответствующую типу клиента - Р1, Р2 и т. д.?а чем Вас Service Reference не устраивает?
...
Рейтинг: 0 / 0
Слои (MVVM, MVC и т. п.) - каждый слой в отдельной сборке?
    #38851332
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вообщем понятно. ИМХО нормально:НемоКэп42- отдельная сборка для доменной логики (ДЛ);
- отдельные сборки для каждого типа клиентов (К);
- отдельная сборка для классов результатов (Р) - соответствующих типам клиентов;
- отдельная сборка для службы (С).
действуйте
...
Рейтинг: 0 / 0
Слои (MVVM, MVC и т. п.) - каждый слой в отдельной сборке?
    #38851339
НемоКэп42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAвообщем понятно. ИМХО нормально:НемоКэп42- отдельная сборка для доменной логики (ДЛ);
- отдельные сборки для каждого типа клиентов (К);
- отдельная сборка для классов результатов (Р) - соответствующих типам клиентов;
- отдельная сборка для службы (С).
действуйте
А если с учётом этого

авторВозможно, чтобы разные клиенты не знали об устройстве данных для других клиентов, нужно каждый тип результата выделить в отдельную сборку, соответствующую типу клиента - Р1, Р2 и т. д.?

у меня получается вот это: (см. рисунок)

это нормально, исходя из моих требований? Просто получается, что сборок результатов будет по числу клиентов - не много ли сборок?..


Хотя, глядя на некоторые программы, как в них сотни ДЛЛ устанавливаются, у меня ещё всё нормально.

(хорошо иметь планшет на Винде со стилусом )
...
Рейтинг: 0 / 0
Слои (MVVM, MVC и т. п.) - каждый слой в отдельной сборке?
    #38851341
НемоКэп42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут ещё надо уточнить, что число Р в общем случае не равно числу К. Число К зависит от числа типов приложений, а число Р - от числа типов аккаунтов.
...
Рейтинг: 0 / 0
Слои (MVVM, MVC и т. п.) - каждый слой в отдельной сборке?
    #38851374
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НемоКэп42Тут ещё надо уточнить, что число Р в общем случае не равно числу К. Число К зависит от числа типов приложений, а число Р - от числа типов аккаунтов.Ну и нормально.
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Слои (MVVM, MVC и т. п.) - каждый слой в отдельной сборке?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]