powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Архитектура
69 сообщений из 69, показаны все 3 страниц
Архитектура
    #38231476
arch2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Используете ли вы такую архитектуру или Ваш проект организован как-то по-другому?

- модели данных (классы что генерит EF, L2SQL и другие орм)
- модели представления - то, что передается во вьюхи
- репозитории где весь фунционал генерящий списки на основе модели данных для модели представления

В контроллерах вызываются методы из репозиториев, заполняется модель данных и передается в представление
...
Рейтинг: 0 / 0
Архитектура
    #38231489
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
arch2000,
авторВ контроллерах вызываются методы из репозиториев, заполняется модель данных и передается в представление
А вот встречный вопрос - модель может быть самодостаточной? то есть сама себя заполнять при инициализации?
...
Рейтинг: 0 / 0
Архитектура
    #38231661
cooldeveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
arch2000В контроллерах вызываются методы из репозиториев, заполняется модель данных модель представления и передается в представление
...
Рейтинг: 0 / 0
Архитектура
    #38231790
evgen12345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
cooldeveloperarch2000В контроллерах вызываются методы из репозиториев, заполняется модель данных модель представления и передается в представление

И таким образом контроллер знает о модели - это правильно?
...
Рейтинг: 0 / 0
Архитектура
    #38231816
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
evgen12345cooldeveloperпропущено...


И таким образом контроллер знает о модели - это правильно?
А он в общем то и должен знать о модели он ведь ее спускает во вью
Код: c#
1.
2.
3.
  public ActionResult Index(string id){
   return View(new MyModel(id));
}


И также получает при Post
Код: c#
1.
2.
3.
  public ActionResult Index(string id ,MyModel model){
   return View(model);
}
...
Рейтинг: 0 / 0
Архитектура
    #38231855
cooldeveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
evgen12345И таким образом контроллер знает о модели - это правильно?
Шагом марш читать букварь!
...
Рейтинг: 0 / 0
Архитектура
    #38231993
evgen12345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
cooldeveloperevgen12345И таким образом контроллер знает о модели - это правильно?
Шагом марш читать букварь!

Да в том то и дело - я этих букварей начитался и теперь каша в голове.
Разьясните мне (если не сложно) зачем тогда скрывать модели за вью-моделями. зачем все эти DI если мы получаем сильную зависимость модулей?

Я не могу понять как по слоям располагается вся эта архитектура? Как я понял:

1. есть модель данных, например набор классов для CodeFirst и контекст.
2. следующий слой это репозиторий который предоставляет CRUD операции над моделями и возвращает объекты модели.
3. далее идет ViewModel, в идеале создается для каждой Вью и содержит необходимы набор данных который может подтягиваться из разных моделей с учетом различной логики.
4 View в нее передается ViewModel, в контроллере создается ViewModel и передается в представление.

Так вот я думал что в идеале пункты 1 и 2 должны быть закрыты от 3 и выше. А перед пунктом 3, есть пункт:

3.a - слой/сервис (назавем его слоем бизнес логики) который скрывает сложности создания бизнес сущности и логику ее обработки. Данный сервис предоставляет методы получения и сохранения ViewModel, так как кроме логика сохранения данных может быть достаточна сложна - данные нужно разложить на сопоставляющие ее объекты модели, установить связи, возможно что то еще.

Тогда последовательность будет следующей: 1, 2, 3a, 3, 4.
И тогда о модели данных не будет знать представление или это не нужно?
...
Рейтинг: 0 / 0
Архитектура
    #38232027
cooldeveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
evgen12345Разьясните мне (если не сложно) зачем тогда скрывать модели за вью-моделями.
Модель (она же дата-модель, модель данных, классы датаконтекста) - это обвязка БД, а вью-модель - это класс для представления (валидация, логика и т.д.). Вью-модель может содержать в себе несколько моделей данных, дополнительные коллекции для привязки различных элементов управления (комбобоксы, гриды и т.д.). Только и всего. В самом простом случае можно использовать в качестве вьюмодели саму модель данных.

evgen12345зачем все эти DI если мы получаем сильную зависимость модулей?
Не вижу никакой зависимости. Есть впраппинг, но не зависимость. DI не панацея, можно с таким же успехом воспользоваться наследованием и хранить экземпляры там. Вот пример .

evgen123451. есть модель данных, например набор классов для CodeFirst и контекст.
2. следующий слой это репозиторий который предоставляет CRUD операции над моделями и возвращает объекты модели.
3. далее идет ViewModel, в идеале создается для каждой Вью и содержит необходимы набор данных который может подтягиваться из разных моделей с учетом различной логики.
4 View в нее передается ViewModel, в контроллере создается ViewModel и передается в представление.
Всё верно.

evgen12345Так вот я думал что в идеале пункты 1 и 2 должны быть закрыты от 3 и выше. А перед пунктом 3, есть пункт:
Они и так закрыты от 3. Контроллер обращается к репозитрию, получает дата-модель, перемапливает её во вью-модель и скармиливает представлению.

evgen12345И тогда о модели данных не будет знать представление или это не нужно?
Что-то я нифига не понял :)
...
Рейтинг: 0 / 0
Архитектура
    #38232107
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
arch2000Используете ли вы такую архитектуру или Ваш проект организован как-то по-другому?

- модели данных (классы что генерит EF, L2SQL и другие орм)
- модели представления - то, что передается во вьюхи
- репозитории где весь фунционал генерящий списки на основе модели данных для модели представления

В контроллерах вызываются методы из репозиториев, заполняется модель данных и передается в представлениеНе использую, т.к. мой проект организован по-другому.

- доменная модель (классы, выражающие сущности предметной области и классы-сервисы, реализующие бизнес-логику)
- модели данных, мапперы
- репозитории, что используются в классах-сервисах
- модели представления
...
Рейтинг: 0 / 0
Архитектура
    #38232121
evgen12345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
cooldeveloper,

спасибо большое, стало прояснятся. Получается 3а - это и есть сам контроллер, методы контроллера.


авторИ тогда о модели данных не будет знать представление или это не нужно?

В этой фразе скрывается мысль -> клиентская часть нечего не знает от том как хранятся данные, о их структуре. А знает только о ViewModel, или этого не нужно добиваться?


Еще один вопрос.
cooldeveloperНе вижу никакой зависимости. Есть впраппинг, но не зависимость. DI не панацея, можно с таким же успехом воспользоваться наследованием и хранить экземпляры там

Что такое врапинг? с ходу в гугле не нашел, можно ткнуть носом?
...
Рейтинг: 0 / 0
Архитектура
    #38232131
cooldeveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA- доменная модель (классы, выражающие сущности предметной области и классы-сервисы, реализующие бизнес-логику)
- модели данных, мапперы
- репозитории, что используются в классах-сервисах
- модели представления
Так те же яйца, только вид сбоку.

evgen12345Что такое врапинг? с ходу в гугле не нашел, можно ткнуть носом?
http://ru.wikipedia.org/wiki/Враппер Обёртка по-русски.
...
Рейтинг: 0 / 0
Архитектура
    #38232164
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cooldeveloperskyANA- доменная модель (классы, выражающие сущности предметной области и классы-сервисы, реализующие бизнес-логику)
- модели данных, мапперы
- репозитории, что используются в классах-сервисах
- модели представления
Так те же яйца, только вид сбоку.Ну не скажи. Данные могут быть распределены: часть в SQL БД, часть в NoSQL БД, часть в каком нить кэше на Couchbase. Репозиторий скрывает то, где они хранятся и как распределены, скрывает модели данных и маппинг, и выдаёт доменные объекты.
А у ТС, что выдаёт репозиторий? И где у ТС бизнес-логика, в контроллерах что-ли, или в БД, или в репозиториях?
...
Рейтинг: 0 / 0
Архитектура
    #38232180
cooldeveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAНу не скажи. Данные могут быть распределены: часть в SQL БД, часть в NoSQL БД, часть в каком нить кэше на Couchbase. Репозиторий скрывает то, где они хранятся и как распределены, скрывает модели данных и маппинг, и выдаёт доменные объекты.
А я тебе про что? Даже ссылку дал , в которой как-раз и говорится о том, что работаем с разными источниками.

skyANAА у ТС, что выдаёт репозиторий? И где у ТС бизнес-логика, в контроллерах что-ли, или в БД, или в репозиториях?
Еще раз прочти сабжевый пост, там речь о репозитории. Логика - во вьюмоделях или, как вариант, ее можно выносить в отдельный слой.
...
Рейтинг: 0 / 0
Архитектура
    #38232574
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cooldeveloper, моя твоя не понимает.

ТС спросил, я ему ответил.

У меня более сложный проект, чем у него.
Есть десктоп админка, где можно добавлять, редактировать, удалять данные. Смотреть логи, настраивать параметры.
Есть морда на ASP.NET MVC, что красиво отображает динамику изменения данных в виде инфографических виджетов.
Также отображение этих виджетов реализовано в клиенте для iOS и в виде Windows Sidebar Gadget.
Есть веб-сервис, что отдаёт и принимает данные из внешних систем. Реализован 1С клиент, что работает с этим сервисом.

У меня доменная модель ничего не знает о структуре хранения данных в БД, в 1С, где-то там ещё.

А у ТС? У него репозитории генерирует какие-то списки на основе модели данных. Что в этих списках, экземпляры классов модели данных, или модели представления?
...
Рейтинг: 0 / 0
Архитектура
    #38232606
cooldeveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAА у ТС? У него репозитории генерирует какие-то списки на основе модели данных. Что в этих списках, экземпляры классов модели данных, или модели представления?
У него пока ничего нет, он интересуется как ему жить :)
...
Рейтинг: 0 / 0
Архитектура
    #38232666
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cooldeveloperskyANAА у ТС? У него репозитории генерирует какие-то списки на основе модели данных. Что в этих списках, экземпляры классов модели данных, или модели представления?
У него пока ничего нет, он интересуется как ему жить :)Ну дак давай выясним, что за проект он планирует пейсать, прежде чем рассуждать о яйцах и о том, с какого ракурса на них смотреть.
...
Рейтинг: 0 / 0
Архитектура
    #38232990
evgen12345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAcooldeveloperпропущено...

Так те же яйца, только вид сбоку.Ну не скажи. Данные могут быть распределены: часть в SQL БД, часть в NoSQL БД, часть в каком нить кэше на Couchbase. Репозиторий скрывает то, где они хранятся и как распределены, скрывает модели данных и маппинг, и выдаёт доменные объекты.
А у ТС, что выдаёт репозиторий? И где у ТС бизнес-логика, в контроллерах что-ли, или в БД, или в репозиториях?

Вот это я очень долго ждал! Спасибо - теперь все более менее понятно.
...
Рейтинг: 0 / 0
Архитектура
    #38233074
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
evgen12345skyANAпропущено...
Ну не скажи. Данные могут быть распределены: часть в SQL БД, часть в NoSQL БД, часть в каком нить кэше на Couchbase. Репозиторий скрывает то, где они хранятся и как распределены, скрывает модели данных и маппинг, и выдаёт доменные объекты.
А у ТС, что выдаёт репозиторий? И где у ТС бизнес-логика, в контроллерах что-ли, или в БД, или в репозиториях?

Вот это я очень долго ждал! Спасибо - теперь все более менее понятно.Хм. У Фаулера есть каталог шаблонов , а к нему есть перевод: design-pattern.ru .
...
Рейтинг: 0 / 0
Архитектура
    #38233107
Фотография EDUARD SAPOTSKI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAИ где у ТС бизнес-логика, в контроллерах что-ли, или в БД, или в репозиториях?
БЛ должна быть в веб-сервисах
...
Рейтинг: 0 / 0
Архитектура
    #38233158
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EDUARD SAPOTSKIskyANAИ где у ТС бизнес-логика, в контроллерах что-ли, или в БД, или в репозиториях?
БЛ должна быть в веб-сервисах А морда должна быть на SL!
А заказы у Вас такие ещё остались?
...
Рейтинг: 0 / 0
Архитектура
    #38233185
Фотография EDUARD SAPOTSKI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAА морда должна быть на SL!
Предпочтительно
skyANAА заказы у Вас такие ещё остались?
Да, мне сейчас целый завод под SL отдали, развлекайся не хочу

Но в том-то и дело что веб-сервисы можно дергать с чего угодно и SL по большому счету здесь не причем...
...
Рейтинг: 0 / 0
Архитектура
    #38233191
cooldeveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EDUARD SAPOTSKI, веб сервисы на помойку. Даешь wcf.
...
Рейтинг: 0 / 0
Архитектура
    #38233201
Фотография EDUARD SAPOTSKI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cooldeveloperEDUARD SAPOTSKI, веб сервисы на помойку. Даешь wcf.
Дык я про WCF и говорю...
...
Рейтинг: 0 / 0
Архитектура
    #38233211
cooldeveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EDUARD SAPOTSKIcooldeveloperEDUARD SAPOTSKI, веб сервисы на помойку. Даешь wcf.
Дык я про WCF и говорю...
Дык ты говоришь про веб сервисы...
...
Рейтинг: 0 / 0
Архитектура
    #38233221
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EDUARD SAPOTSKI, Вы как-то ни о чём говорите.
К примеру в терминах шаблонов проектирования что Вы предлагаете убрать, или добавить?
...
Рейтинг: 0 / 0
Архитектура
    #38233224
Фотография EDUARD SAPOTSKI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cooldeveloperДык ты говоришь про веб сервисы...
Не находишь что WCF покрывает функционал веб-сервисов?
Эта терминалогия сегодня уже устаревающая формальность ИМХО.
...
Рейтинг: 0 / 0
Архитектура
    #38233233
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EDUARD SAPOTSKIcooldeveloperДык ты говоришь про веб сервисы...
Не находишь что WCF покрывает функционал веб-сервисов?
Эта терминалогия сегодня уже устаревающая формальность ИМХО.WCF, не WCF. Сам код сервиса какую архитектуру имеет?
...
Рейтинг: 0 / 0
Архитектура
    #38233237
Фотография EDUARD SAPOTSKI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAК примеру в терминах шаблонов проектирования что Вы предлагаете убрать, или добавить? А я как-то уже на эти темы и не загоняюсь, есть ORM, сверху накрываю WCF-прослойкой где реализую основную БЛ, а клиент уже дело десятое...
...
Рейтинг: 0 / 0
Архитектура
    #38233285
cooldeveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EDUARD SAPOTSKIНе находишь что WCF покрывает функционал веб-сервисов?
Трактор покрывает функционал лопаты. Лопата это трактор?

EDUARD SAPOTSKIЭта терминалогия сегодня уже устаревающая формальность ИМХО.
Терминология всегда была едина. Если нужно сказать о сервисном подходе, то говори SOA. Если нужно сказать о конкретике, говори WCF или веб-сервисы (asmx).

P.S. Распределять бизнес логику через SOA - не панацея. Где-то это нужно (если у тебя n систем на различных платформах и фреймворках используют общий шлюз с логикой), где-то это нафик не нужно. Если у тебя .NET архитектура, все эти SOA пляски только навредят. Закладываешь логику в отдельную сборку и скармливаешь потребителям.
...
Рейтинг: 0 / 0
Архитектура
    #38233310
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EDUARD SAPOTSKIskyANAК примеру в терминах шаблонов проектирования что Вы предлагаете убрать, или добавить? А я как-то уже на эти темы и не загоняюсь, есть ORM, сверху накрываю WCF-прослойкой где реализую основную БЛ, а клиент уже дело десятое...А если появится необходимость данные брать к примеру из NoSQL БД, или получать у десятка сторонних систем, или всё вместе, то Вы, не загоняясь, напишите ещё пару WCF-прослоек, где повторно реализуете БЛ?
...
Рейтинг: 0 / 0
Архитектура
    #38233324
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EDUARD SAPOTSKI, Вы походу не поняли, что классы доменной модели, реализующие бизнес-логику, классы конкретной модели данных, конкретной реализации репозитория пишутся один раз и используются хоть в WCF-прослойках, хоть в ASP.NET MVC, хоть где.

И Ваша фраза: "БЛ должна быть в веб-сервисах", - ни о чём.
...
Рейтинг: 0 / 0
Архитектура
    #38233698
Фотография EDUARD SAPOTSKI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cooldeveloperТерминология всегда была едина. Если нужно сказать о сервисном подходе, то говори SOA. Если нужно сказать о конкретике, говори WCF или веб-сервисы (asmx).
Уговорил:) Всем приношу свои извинения, под веб-сервисами я подразумевал именно технологию WCF!
cooldeveloperРаспределять бизнес логику через SOA - не панацея.
Не спорю. Но у меня этот вариант очень хорошо прокатывает
skyANAА если появится необходимость данные брать к примеру из NoSQL БД, или получать у десятка сторонних систем, или всё вместе, то Вы, не загоняясь, напишите ещё пару WCF-прослоек, где повторно реализуете БЛ?
Какая мне разница где хранятся данные? Есть ORM с объектной моделью с ней я и работаю в WCF-сервисах. Откуда брать данные это проблемы ORM, если брать данные со сторонних систем, так WCF в этом случае по дефолту то что доктор прописал.
skyANAВы походу не поняли, что классы доменной модели, реализующие бизнес-логику, классы конкретной модели данных, конкретной реализации репозитория пишутся один раз и используются хоть в WCF-прослойках, хоть в ASP.NET MVC, хоть где.
Да все это я прекрасно знаю, я просто говорю Вам как можно сделать все быстро, дешево и сердито, еще и будет работать
...
Рейтинг: 0 / 0
Архитектура
    #38233704
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EDUARD SAPOTSKI,
Дык о чем вы говорите, это одна из методик получения данных(soap, почта России и тд), применяется обычно - как старший скажет.
МСУ он такой, за все цепляется..
...
Рейтинг: 0 / 0
Архитектура
    #38233769
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EDUARD SAPOTSKIskyANAА если появится необходимость данные брать к примеру из NoSQL БД, или получать у десятка сторонних систем, или всё вместе, то Вы, не загоняясь, напишите ещё пару WCF-прослоек, где повторно реализуете БЛ?Какая мне разница где хранятся данные? Есть ORM с объектной моделью с ней я и работаю в WCF-сервисах. Откуда брать данные это проблемы ORM.Снова ни о чём. Приведите пример ORM, что сможет взять данные к примеру из MongoDB.

EDUARD SAPOTSKIskyANAВы походу не поняли, что классы доменной модели, реализующие бизнес-логику, классы конкретной модели данных, конкретной реализации репозитория пишутся один раз и используются хоть в WCF-прослойках, хоть в ASP.NET MVC, хоть где.Да все это я прекрасно знаю, я просто говорю Вам как можно сделать все быстро, дешево и сердито, еще и будет работать Спасибо конечно. Но сделать, чтобы работало, не заморачиваясь по поводу архитектуры, любой вчерашний студент сможет.
По теме что-нибудь скажете?
...
Рейтинг: 0 / 0
Архитектура
    #38234562
Фотография EDUARD SAPOTSKI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиДык о чем вы говорите, это одна из методик получения данных(soap, почта России и тд), применяется обычно - как старший скажет.
МСУ он такой, за все цепляется..Да, это одна из методик получения данных и на мой взгляд на сегодняшний день самая универсальная из всего что придумали, т.к. данные может получить/отправить и толстый клиент и тонкий и SL-приложение и таже 1С-ка... И на мой взгляд WCF это удобное место для размещения бизнес-логики.
ЗЫ При чем здесь МСУ я так и не понял, у меня своя голова на плечах, если наши мнения в чем-то сходятся это не значит что я ему поддакиваю или подражаю. К вменяемым аргументам я всегда уважительно отношусь.
skyANAСнова ни о чём. Приведите пример ORM, что сможет взять данные к примеру из MongoDB.Привидите мне статистику, какой процент проектов на .NET работают с MongoDB? Ну не нужна мне MongoDB как и 99%-ам девелоперов! А если даже что-то в лесу сдохнет и она мне понадобится, то что мешает состряпать DAO-прослойку и заюзать теже WCF-сервисы?
skyANAСпасибо конечно. Но сделать, чтобы работало, не заморачиваясь по поводу архитектуры, любой вчерашний студент сможет.
По теме что-нибудь скажете?Еще раз, используемая мной архитектура - ORM(одни классы сущностей, никакой логики, только доступ к данным из БД), WCF сервис(юзает объекты предоставляемые ORM, реализует БЛ, предоставляет доступ приложениям). В чем конкретно Вы видите недостатки такой архитектуры?
...
Рейтинг: 0 / 0
Архитектура
    #38234591
cooldeveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAПриведите пример ORM, что сможет взять данные к примеру из MongoDB
Честно говоря, тоже не совсем понял, причем тут ORM к монго. В чем проблема написать реализацию своего IMongoDataService, который во внутрях содержит объектную модель штатного драйвера ? Извне это будет так же смотреться, как и IOracleDataService, как и ISqlServerDataService.
...
Рейтинг: 0 / 0
Архитектура
    #38234621
cooldeveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мы тут с вами за архитектуру, а тут вона жесть 14211392 какая бывает
...
Рейтинг: 0 / 0
Архитектура
    #38234684
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EDUARD SAPOTSKI,
авторДа, это одна из методик получения данных и на мой взгляд на сегодняшний день самая универсальная из всего что придумали, т.к. данные может получить/отправить и толстый клиент и тонкий и SL-приложение и таже 1С-ка... И на мой взгляд WCF это удобное место для размещения бизнес-логики.
Да не лучше она и не хуже, куча г..носайтов ( почти все ) сидят на отдаче информации и что, я должен прикручивать wcf что бы получить что то на основе чего то с базы которая лежит в корневой сайта, в зависимости от того?
Да не в жись, достаточно хоть чего но не wcf , если смотреть с точки зрения каркаса то орм така же загигулина как wcf ( абстрактно)
то что я не могу туда логику засунуть, дак это спорно, в хибере я могу делать триггеры на операции заряжать их делегатами и иметь возможность хранить этот код в дальнем чулане..
Зы МСУ на форуме все....
...
Рейтинг: 0 / 0
Архитектура
    #38236003
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EDUARD SAPOTSKIskyANAСнова ни о чём. Приведите пример ORM, что сможет взять данные к примеру из MongoDB.Привидите мне статистику, какой процент проектов на .NET работают с MongoDB? Ну не нужна мне MongoDB как и 99%-ам девелоперов! А если даже что-то в лесу сдохнет и она мне понадобится, то что мешает состряпать DAO-прослойку и заюзать теже WCF-сервисы?И зачем Вам моя статистика? Для Вас MongoDB - это как один из примеров. Речь идёт о том, что данные могут быть распредлены: сегодня они хранятся в одной единственной вашей БД, а завтра помимо неё надо опрашивать сервера и сервисы партнёров (предметная область туризм) и ORM с WCF вам в этом не помогут.

Я понимаю, что Вы с этим не сталкивались, что для решения 99% Ваших задач не требуется использовать какие-то шаблоны проектирования и загоняться на тему архитектуры.
Но зачем тогда участвовать в дискуссии о ней?
EDUARD SAPOTSKIskyANAСпасибо конечно. Но сделать, чтобы работало, не заморачиваясь по поводу архитектуры, любой вчерашний студент сможет.
По теме что-нибудь скажете?Еще раз, используемая мной архитектура - ORM(одни классы сущностей, никакой логики, только доступ к данным из БД), WCF сервис(юзает объекты предоставляемые ORM, реализует БЛ, предоставляет доступ приложениям). В чем конкретно Вы видите недостатки такой архитектуры?Я вообще не вижу тут никакой архитектуры. Снаружи это может и выглядит как архитектурное решение. Но о внутренней реализации ничего не сказано. Если в методе сервиса дёргается ORM, полученные объекты тут же обрабатываются и отдаются наружу, то это, грубо говоря, ничем не отличается от "в методе ОнБаттонКлик открываем конекшн, дёргаем дата адаптер, обрабатываем полученный датасет".
...
Рейтинг: 0 / 0
Архитектура
    #38236006
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cooldeveloperskyANAПриведите пример ORM, что сможет взять данные к примеру из MongoDB
Честно говоря, тоже не совсем понял, причем тут ORM к монго. В чем проблема написать реализацию своего IMongoDataService...Никаких проблем. Я уже написал, а Эдуарду это не нужно.
...
Рейтинг: 0 / 0
Архитектура
    #38236012
cooldeveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA, честно говоря, я уже запутался, котому что нужно и какая у кого архитектура
...
Рейтинг: 0 / 0
Архитектура
    #38236043
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cooldeveloper, дык перечитай топик.
...
Рейтинг: 0 / 0
Архитектура
    #38236383
Фотография EDUARD SAPOTSKI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAсегодня они хранятся в одной единственной вашей БД, а завтра помимо неё надо опрашивать сервера и сервисы партнёров (предметная область туризм) и ORM с WCF вам в этом не помогут.Почему не помогут?! Еще раз:
EDUARD SAPOTSKIчто мешает состряпать DAO-прослойку и заюзать теже WCF-сервисы?cooldeveloperВ чем проблема написать реализацию своего IMongoDataService, который во внутрях содержит объектную модель штатного драйвера ? Извне это будет так же смотреться, как и IOracleDataService, как и ISqlServerDataService.И что мешает в том же WCF - сервисе дергать сервера Ваших партнеров?! skyANAВаших задач не требуется использовать какие-то шаблоны проектирования и загоняться на тему архитектуры.
Видишь кролика? А он есть! (с)
Этими паттернами и "изысканными архитектурами" уже весь инет засрали, а когда дело до практики доходит, так никто не может внятно объяснить зачем это нужно! Ну хорошо, туризм так туризм. Имел честь учавствовать в разработке системы бронирования, для гостиничного комплекса. Есть предварительное бронирование, заезд клиента, "интелектуальная система расселения по номерам", отчеты и т.д... Вот какая из этих задач требует неких изысканных архитектурных решений и эксклюзивных паттернов?!
Ну или привидите свой РЕАЛЬНЫЙ пример задачи, где это действительно необходимо!
...
Рейтинг: 0 / 0
Архитектура
    #38236403
cooldeveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAcooldeveloper, дык перечитай топик.
Перечитал. Один одно горорит, другой другое, третий третье. Каша, базар и неразбериха, хотя проблема и выеденного яйца не стоит.
...
Рейтинг: 0 / 0
Архитектура
    #38236413
cooldeveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EDUARD SAPOTSKI, смотри, на пальцах. Если у тебя логика размещена в SOA, то на каждый чих тебе нужно ходить куда-то на сервер и дергать 100500 методов. Когда логика у меня под рукой в классе (dll), то мне не нужно никуда ходить, всё работает оперативно и независимо. Отседова простота и скорость. У обоих вариантов есть свои плюсы и минусы. У первого, например, из плюсов - это, несомненно, распределенность (как следствие, масштабируемость) и централизованность. Долго еще будем тесто месить?
...
Рейтинг: 0 / 0
Архитектура
    #38236461
Фотография EDUARD SAPOTSKI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cooldeveloperсмотри, на пальцах. Если у тебя логика размещена в SOA, то на каждый чих тебе нужно ходить куда-то на сервер и дергать 100500 методов. Когда логика у меня под рукой в классе (dll), то мне не нужно никуда ходить, всё работает оперативно и независимо. Отседова простота и скорость. У обоих вариантов есть свои плюсы и минусы. У первого, например, из плюсов - это, несомненно, распределенность (как следствие, масштабируемость) и централизованность. Долго еще будем тесто месить?
Дык ёпт, что мешает теже WCF сервисы сбить в dll-ку и юзать ее как простую сборку классов с БЛ? Можно еще атрибуты закоментить для полного счастья. Говорим об одном и том же, но skyANA грит что это нифига не архитектура! Так а что тогда архитектура?!
...
Рейтинг: 0 / 0
Архитектура
    #38236512
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EDUARD SAPOTSKI, лично мне ничто не мешает использовать какие-то сборки с какими-то классами. Я на первой странице в кратце описал из каких частей состоит мой проект и что и как там используется.

Вы же, судя по Вашим постам, не писали никаких DAO-прослоек, не делали независимых от модели данных сборок с классами БЛ, вообще не использовали "изысканных архитектурных решений и эксклюзивных паттернов", т.к. оно Вам и не надо было.

Я предполагаю, что реализация методов в Вашем WCF сервисе по большому счёту ничем не отличается от "в методе ОнБаттонКлик открываем конекшн, дёргаем дата адаптер, обрабатываем полученный датасет".

И собственно по этому не вижу смысла обсуждать с Вами какие-то архитектурные решения и шаблоны проектирования.
...
Рейтинг: 0 / 0
Архитектура
    #38236521
cooldeveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EDUARD SAPOTSKIДык ёпт, что мешает теже WCF сервисы сбить в dll-ку и юзать ее как простую сборку классов с БЛ?
С каких это пор реализация классов SOA доступна для потребителей?!
...
Рейтинг: 0 / 0
Архитектура
    #38236536
Фотография EDUARD SAPOTSKI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAИ собственно по этому не вижу смысла обсуждать с Вами какие-то архитектурные решения и шаблоны проектирования.
Короче конкретного примера не будет
cooldeveloperС каких это пор реализация классов SOA доступна для потребителей?!
ХЗ, возможно я и лоханулся, сейчас посмотрю...
...
Рейтинг: 0 / 0
Архитектура
    #38236539
cooldeveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EDUARD SAPOTSKI, еще раз, найти компромисс с твоим мозгом. Что такое SOA? Правильно, SOA - это, прежде всего, обмен, выраженный абстракциями DTO.

http://msdn.microsoft.com/en-us/library/ff649585.aspx A DTO is a simple container for a set of aggregated data that needs to be transferred across a process or network boundary. It should contain no business logic and limit its behavior to activities such as internal consistency checking and basic validation. Be careful not to make the DTO depend on any new classes as a result of implementing these methods.

Какая в жопу бизнес логика в SOA, ты что? Только обмен болванками (тупыми прокси классами). Поэтому я тебе и написал про 100500 раз дергать разные методы сервиса, вместо того, чтобы тупо заюзать целостный класс с нормальной реализацией логики в нем.

P.S. Такое ощущение, что ты инопланетянен. Ну или с SOA не работал и насилуешь нам тут моцк. Мало того, вебсервисы он wcf-ы называл, так еще и в dto он логику собрался поставлять через шлюзы. Пестец просто.
...
Рейтинг: 0 / 0
Архитектура
    #38236540
cooldeveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EDUARD SAPOTSKIcooldeveloperС каких это пор реализация классов SOA доступна для потребителей?!
ХЗ, возможно я и лоханулся, сейчас посмотрю...
Причем конкретно, друг мой. Готовь зад, я несу хлыст...
...
Рейтинг: 0 / 0
Архитектура
    #38236564
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EDUARD SAPOTSKIskyANAИ собственно по этому не вижу смысла обсуждать с Вами какие-то архитектурные решения и шаблоны проектирования.
Короче конкретного примера не будет Ну почему же. Пример проекта, что я уже описал в етме - это мой личный проект, в данный момент на стадии тестирования перед релизом и сборки интсаллятора, надеюсь в скором времени смогу дать ссылку на сайт.

Вот ссылка на проект с предыдущей работы. Ссылка на проект, что разрабатывается на текущем месте работы, в профиле.
...
Рейтинг: 0 / 0
Архитектура
    #38236572
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Более 200 000 отелей по всему миру от глобальных поставщиков (GTA, Kuoni, Travco и пр.) и принимающих туроператоров Европы - это конечно не гостиничный комплекс, но что есть, то есть...
...
Рейтинг: 0 / 0
Архитектура
    #38236622
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cooldeveloperEDUARD SAPOTSKI... Такое ощущение, что ты инопланетянен. Ну или с SOA не работал и насилуешь нам тут моцк. Мало того, вебсервисы он wcf-ы называл, так еще и в dto он логику собрался поставлять через шлюзы. Пестец просто.ВикипедиЯ Сервис-ориентированная архитектура (англ. Service-oriented Architecture) — подход к разработке программного обеспечения на основе слабосвязанных компонентов, взаимодействующих посредством стандартизованных интерфейсов.EDUARD SAPOTSKIЭтими паттернами и "изысканными архитектурами" уже весь инет засрали, а когда дело до практики доходит, так никто не может внятно объяснить зачем это нужно !
МСУ, ему это не нужно, конечно он не работал.
...
Рейтинг: 0 / 0
Архитектура
    #38236651
cooldeveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA, не хотелось Эдюшку шпынять, нормальный парень, но достал уже ей богу...
...
Рейтинг: 0 / 0
Архитектура
    #38236663
Фотография EDUARD SAPOTSKI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cooldeveloperskyANA, не хотелось Эдюшку шпынять, нормальный парень, но достал уже ей богу...
Не парься, у меня отпуск, поэтому тут херней страдаю
...
Рейтинг: 0 / 0
Архитектура
    #38236682
cooldeveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EDUARD SAPOTSKIпоэтому тут херней страдаю
Я так и понял.
Значит, вот тут ты нам аккуратно поднаврал?
EDUARD SAPOTSKIВидишь кролика? А он есть! (с)
А тут?
EDUARD SAPOTSKIНу хорошо, туризм так туризм. Имел честь учавствовать в разработке системы бронирования, для гостиничного комплекса.
Батенька, позволь нескромно поинтересоваться, на чем крутилась твоя системы бронирования, на DTO-логике в SOA?
...
Рейтинг: 0 / 0
Архитектура
    #38236700
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cooldeveloper, вполне может оказаться, что под системой бронирование понимается: "позвонили в гостиницу на ресепшн, или пришли с паспортом, и ваши данные какая-то тётушка куда-то вбила".
...
Рейтинг: 0 / 0
Архитектура
    #38236716
Фотография EDUARD SAPOTSKI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cooldeveloperЗначит, вот тут ты нам аккуратно поднаврал?
EDUARD SAPOTSKIВидишь кролика? А он есть! (с)
А тут?
EDUARD SAPOTSKIНу хорошо, туризм так туризм. Имел честь учавствовать в разработке системы бронирования, для гостиничного комплекса.
Не поверишь, но не совсем наврал, реально сто лет назад допиливали довольно "с виду" приличную систему.
cooldeveloperБатенька, позволь нескромно поинтересоваться, на чем крутилась твоя системы бронирования, на DTO-логике в SOA?
А от тут можешь сразу падать пацтол! На эксесе!
...
Рейтинг: 0 / 0
Архитектура
    #38236720
cooldeveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA, ну может и правда участвовал, просто дело далече, чем SqlCommand + SqlDataReader + DataSet не заходило. Эдичек ведь честный малый, а не врунишка форумный.
...
Рейтинг: 0 / 0
Архитектура
    #38236722
cooldeveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EDUARD SAPOTSKIНе поверишь, но не совсем наврал, реально сто лет назад допиливали довольно "с виду" приличную систему.
Как мне нравятся такие ответы :)
...
Рейтинг: 0 / 0
Архитектура
    #38236744
st_st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кто-нить помнит как эту штуковину System.Web.HttpContext.GetGlobalResourceObject(key, value) заставить видеть внедрённые ресурсы? После деплоя папки с ресурсами нет (App_GlobalResources), они в dll теперь и данная штуковина всегда возвращает null. Ну а Project.App_GlobalResources.Key.Value прекрасно работает без данной папки.
...
Рейтинг: 0 / 0
Архитектура
    #38236864
cooldeveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
st_stПосле деплоя папки с ресурсами нет (App_GlobalResources), они в dll теперь и данная штуковина всегда возвращает null.
Это у WebApplication, чтоли? У меня всё работает и ресурсы никуда не компилятся. Нафига resx куда-то вкомпиливать.
...
Рейтинг: 0 / 0
Архитектура
    #38236921
st_st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cooldeveloperЭто у WebApplication, чтоли? У меня всё работает и ресурсы никуда не компилятся. Нафига resx куда-то вкомпиливать.

Если отправлять содержимое ресурсов (content), тогда при деплое папка App_GlobalResources целиком перекидывается на хостинг и GetGlobalResourceObject() работает. А ставишь внедрённые (насколько помню "embedded" в англ. студии, они по умолчанию), папка не копируется и GetGlobalResourceObject() возвращает null, а если напрямую ресурс запросить через Project.App_GlobalResources.Key.Value, то работает. Просто интересно, можно ли заставить GetGlobalResourceObject() работать без папки App_GlobalResources и видеть скомпиленные в dll ресурсы, так же как их видит Project.App_GlobalResources. Мне не проблема при деплое копировать ресурсы как есть, без компиляции, вопрос интересен в теоретическом плане.
...
Рейтинг: 0 / 0
Архитектура
    #38236927
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм. Класс System.Web.UI.Page наследуется от класса System.Web.UI.TemplateControl, где есть метод:
Код: c#
1.
2.
3.
4.
protected object GetGlobalResourceObject(string className, string resourceKey)
{
    return ResourceExpressionBuilder.GetGlobalResourceObject(className, resourceKey, null, null, null);
}


Данный метод на странице вызывается к примеру так:
Код: c#
1.
this.Page.Title = Convert.ToString(this.GetGlobalResourceObject("WebResources", "PageTitle"));

и работает

А теперь смотрим класс System.Web.HttpContext:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
public static object GetGlobalResourceObject(string classKey, string resourceKey)
{
    return HttpContext.GetGlobalResourceObject(classKey, resourceKey, null);
}

public static object GetGlobalResourceObject(string classKey, string resourceKey, CultureInfo culture)
{
    return ResourceExpressionBuilder.GetGlobalResourceObject(classKey, resourceKey, null, null, culture);
}


Вроде одинаково
...
Рейтинг: 0 / 0
Архитектура
    #38236950
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
st_stcooldeveloperЭто у WebApplication, чтоли? У меня всё работает и ресурсы никуда не компилятся. Нафига resx куда-то вкомпиливать.

Если отправлять содержимое ресурсов (content), тогда при деплое папка App_GlobalResources целиком перекидывается на хостинг и GetGlobalResourceObject() работает. А ставишь внедрённые (насколько помню "embedded" в англ. студии, они по умолчанию), папка не копируется и GetGlobalResourceObject() возвращает null, а если напрямую ресурс запросить через Project.App_GlobalResources.Key.Value, то работает. Просто интересно, можно ли заставить GetGlobalResourceObject() работать без папки App_GlobalResources и видеть скомпиленные в dll ресурсы, так же как их видит Project.App_GlobalResources. Мне не проблема при деплое копировать ресурсы как есть, без компиляции, вопрос интересен в теоретическом плане.А, вот оно чё, Михалыч! Чёрт его знает, что за фигня. Но!

Вы можете реализовать свой ResourceExpressionBuilder, наследника от System.Web.Compilation.ExpressionBuilder, где использовать свою реализацию IResourceProvider. И подключить это дело через конфиг:
Код: xml
1.
2.
3.
4.
5.
6.
7.
<system.web>
  <compilation>
    <expressionBuilders>
      <add expressionPrefix="MyResources" type="MyAssembly.MyResourceExpressionBuilder, MyAssembly, Version=1.0.0.0, Culture=neutral"/>
    </expressionBuilders>
  </compilation>
</system.web>
...
Рейтинг: 0 / 0
Архитектура
    #38236957
cooldeveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
st_stА ставишь внедрённые (насколько помню "embedded" в англ. студии, они по умолчанию), папка не копируется и GetGlobalResourceObject() возвращает null
А зачем ставить ресурсу embedded, что за бред? Если уж нужен эмбдед, то вот так: http://codearticles.ru/home/articleview/1436

st_stПросто интересно, можно ли заставить GetGlobalResourceObject() работать без папки App_GlobalResources
Сомнитетельное какое-то желание...
...
Рейтинг: 0 / 0
Архитектура
    #38237526
st_st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAиспользовать свою реализацию IResourceProvider

Окончательно ресурсы будут в бд + кэш. А про GetGlobalResourceObject() спросил, так как интересно было, чё он отвалился после деплоя без папки с ресурсами. dll открываешь и там видишь все эти ресурсы и также они доступны через Project.App_GlobalResources.Key.Value. Да и хрен с ним, не столь важно. Продолжайте дальше архитектуру обсуждать :)
...
Рейтинг: 0 / 0
Архитектура
    #38242594
evgen12345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Воскрешу немного топик :)

skyANAarch2000Используете ли вы такую архитектуру или Ваш проект организован как-то по-другому?

- модели данных (классы что генерит EF, L2SQL и другие орм)
- модели представления - то, что передается во вьюхи
- репозитории где весь фунционал генерящий списки на основе модели данных для модели представления

В контроллерах вызываются методы из репозиториев, заполняется модель данных и передается в представлениеНе использую, т.к. мой проект организован по-другому.

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

1. Вопрос про модели - могут ли модели-представления содержать в себе логику, методы которые возвращают данные из этой же модели предоставления (например среднюю сумму по вложенным сущностям по каким либо полям), или свойства только для чтения например которое из Петров Иван Сергеевич, делает Петров И.С.

2. Вложенные сущности и репозитории - я тут запутался, объясню ситуацию.
Я описал интерфейс -
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
public interface IRepository<TModel> : IDisposable
    {
        /// <summary>
        /// Вернуть коллекцию объектов, но не более 100 шт первых.
        /// </summary>
        /// <returns></returns>
        IEnumerable<TModel> GetList(int countItems = 100);

        IEnumerable<TModel> GetList(int page, int pageSize);

        /// <summary>
        /// Вернуть кол-во всех объектов
        /// </summary>
        /// <returns></returns>
        long Count();

        TModel GetById(long id);

        TModel Insert(TModel model);

        TModel Update(TModel model);

        void Delete(TModel model);

    }



Далее, сделал реализацию репозиторя дефолтувую:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
    public abstract class BaseRepository<TModel, TEntity> : IRepository<TModel> 
        where TEntity : class 
        where TModel :class 
    {
        protected readonly DbContext DB;
        protected readonly ObjectsMapper<TEntity, TModel> MapperModel = ObjectMapperManager.DefaultInstance.GetMapper<TEntity, TModel>();
        protected readonly ObjectsMapper<TModel, TEntity> MapperEntity = ObjectMapperManager.DefaultInstance.GetMapper<TModel, TEntity>();

        public BaseRepository(DbContext db)
        {
            DB = db;
        }

        public BaseRepository()
        {
            DB = new RiskControlDb();
        }

        public virtual IEnumerable<TModel> GetList(int countItems = 100)
        {
            var entityQuery = DB.Set<TEntity>().AsQueryable();
            var entityList = Count() > countItems ? entityQuery.Take(countItems).ToList() : entityQuery.ToList();

            return entityList.Select(entity => MapperModel.Map(entity));
        }

        public IEnumerable<TModel> GetList(int page, int pageSize)
        {
            var list = DB.Set<TEntity>().AsQueryable();
            var count = Count();
            var pageCount = (count%pageSize == 0) ? count/pageSize : count/pageSize + 1;

            return list.Skip((page - 1)*pageSize).Take(pageSize).ToList().Select(entity => MapperModel.Map(entity));
        }

        public virtual long Count()
        {
            return DB.Set<TEntity>().LongCount();
        }
        
        public virtual TModel GetById(long id)
        {
            var collection = DB.Set<TEntity>();
            return MapperModel.Map(collection.Find(id));
        }

        public virtual TModel Insert(TModel model)
        {
            var entity = MapperEntity.Map(model);
            DB.Set<TEntity>().Add(entity);
            DB.SaveChanges();

            return MapperModel.Map(entity);
        }

        public virtual TModel Update(TModel model)
        {
            var entity = MapperEntity.Map(model);
            DB.Entry(entity).State = EntityState.Modified;
            DB.SaveChanges();

            return MapperModel.Map(entity);
        }

        public virtual void Delete(TModel model)
        {
            DB.Set<TEntity>().Remove(MapperEntity.Map(model));
            DB.SaveChanges();
        }

        public virtual void Dispose()
        {
            DB.Dispose();
        }
    }



Для создания репозитория для любой модели выглядит след-щим образом:
Код: c#
1.
2.
3.
4.
public class BranchRepository : BaseRepository<BranchModel, BranchEntity>
    {
        
    }



И все теперь для большинства сущностей написать репозиторий дело 2-х минут.

Собственно вопрос - имеем следующее:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
public class ClientModel
    {
        public int Id { get; set; }

        public string NameShort { get; set; }

        public string AddressFirst { get; set; }

        public string Phone { get; set; }

        public string Email { get; set; }

        public string DefaultDocument { get; set; }

        public string Branch { get; set; }

        public ICollection<DocumentModel> Documents { get; set; }
    }

    public class BranchModel
    {
        public int Id { get; set; }

        public string Brief { get; set; }

        public string Description { get; set; }

    }

    public class DocumentModel
    {
        public int Id { get; set; }

        public string Name { get; set; }
    }

    public class Client
    {
        public int Id { get; set; }

        public string NameShort { get; set; }
        
        public string AddressFirst { get; set; }
        
        public string Phone { get; set; }
        
        public string Email { get; set; }

        public string BranchId { get; set; }

        public Branch Branch { get; set; }

        public virtual ICollection<Document> Documents { get; set; }
    }

    public class Branch
    {
        public int Id { get; set; }

        public string Brief { get; set; }

        public string Description { get; set; }

        internal bool IsDelete { get; set; }

        public virtual ICollection<Client> Clients { get; set; }
    }

    public class Document
    {
        public int Id { get; set; }

        public string Name { get; set; }

        public int ClientId { get; set; }

        public Client Client { get; set; }
    }

    public class SampleDb : DbContext
    {
        public DbSet<Client> Clients { get; set; }
        public DbSet<Branch> Branches { get; set; }
        public DbSet<Document> Document { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);

            modelBuilder.Entity<Client>().HasRequired(c => c.Branch);
            modelBuilder.Entity<Document>().HasRequired(c => c.Client);
        }
    }



Получается что докумет не может существовать без клиента и как в этом случае должен быть реализован репозиторий?
Это в репозитории по клиенту добавить методы InsertDocument, UpdateDocument, DeleteDocument, GetDocumentBy....

Или в репозиторий по документу должен быть самостоятельным, но тогда в модель по документу добавится свойство ClientId - которое как мне кажется не имеет отношение к Модели представлению документа и так же не подходит к реализации IRepository?
...
Рейтинг: 0 / 0
69 сообщений из 69, показаны все 3 страниц
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Архитектура
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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