Модераторы: gambit, Kefir, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> о трёхуровневой архитектуре 
:(
    Опции темы
GRemlin87
Дата 18.12.2011, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 12.2.2011

Репутация: нет
Всего: нет



Доброго всем времени суток. Впервые пишу трёхслойное приложение, и хотелось бы посоветоваться с более опытными разработчиками. Для доступа к бд использую linq to sql, с помощью которого генерирую классы по таблицам в sql. Раньше когда всё приложение располагалось в одном проекте я использовал ключевое слово partial когда хотел добавить какую то логику или вспомогательные методы в эти классы. Сейчас когда весь слой бизнес логики вынесен в отдельный проект такой подход не работает. Поэтому для описания логики и валидации приходиться оборачивать эти классы и добавлять нужные мне методы и в слой представления передавать коллекции уже этих классов обёрток. А так как в слое представления использую wpf и шаблон  mvvm приходиться эти бизнес классы оборачивать ещё раз. Смотрю я вот на всю эту махину и нифига мне не нравиться что получилось в итоге. Подскажите плиз на сколько это правильный подход. И по возможности поделитесь ссылками на похожие опенсоурс проекты,а то я ничего вразумительного найти не смог. заранее благодарю за помощь.. 
PM MAIL   Вверх
Gvozdin
Дата 18.12.2011, 20:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 172
Регистрация: 9.8.2011
Где: Москва

Репутация: 8
Всего: 8



Тут многое зависит от размера и сложности проекта.

А почему нельзя сделать shared сборку где будут все linq to sql классы вместе с бизнес логикой и все слои приложения будут их видеть?
Думаю можно так же в классы linq to sql запихнуть и механизмы для WPF(INotifyPropertyChanged и тп).

Но это в случае небольшого проекта где такая "свалка" не будет сильно мешать.

В более продвинутом проекте может потребоваться более жестко отделить все слои друг от друга и тогда действительно надо будет создавать обертки. Сервис работает с linq to sql, передает данные в виде xml клиенту, а клиент оборачивает их в свои классы, работает с ними и отсылает обратно.

Посмотрите на Entity Framework и Self Tracking Entities. В EF есть механизмы для построения многоуровневых приложений. Объекты можно выгрузить из контекста, передать клиенту, далее получить их измененными от клиента и просто положить обратно в контекст и сохранить.

http://msdn.microsoft.com/en-us/library/bb896304.aspx

Я лично на практике не использовал EF в многоуровневом приложении, у нас используется свой ORM, но подходы одинаковы.
Есть низкий уровень представления данных, с простым классом представления данных который удобно передавать на клиент.
И более высокий уровень - контекст и обертки этих данных, с lazy loading и другими вещами для WFP.
--------------------
http://gvozdin.ru
PM MAIL WWW   Вверх
GRemlin87
Дата 21.12.2011, 07:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 12.2.2011

Репутация: нет
Всего: нет



спасибо за ответ и за ссылку, действительно узнал кое что новое. К сожалению EF применить не могу так как по условию задания ограничен именно Linq to Sql, и в один проект всё запихать нельзя так как проект учебный и требует именно чёткой организации архитектурных слоёв.Я вот делаю так, допустим у нас есть таблица в бд Person с полями Name CountMoney. Использую визуальный редактор Linq to sql создаю dataContext, заодно и генерируется класс
Код

class Person
{
      public Name{get;set;}
      public CountMoney{get;set;}
}

Этот класс я использую в слое доступа к данным например с шаблоном repository
Дальше в слое бизнес логики мне нужно сделать какие вычисления с полем CountMoney для этого я делаю класс обёртку и добавляю в него нужные методы
Код

class BLPerson
{
    public Person{get;set;} 
    float MethodWhithMoney()
    {
      .................
    }
}

в таком виде обьекты и передаю в слой представления там создаю ещё обёртку над этим классом куда добавляю свойства для Wpf
Код

class PersonViewModel:INotifyPropertyChanged 
{
       public BLPerson{get;set;}
     ........
}
 
В принципе такой подход вполне работает, но мне очень не нравиться что каждый слой плодит свои сущности и если количество классов велико то это сильно усложнит приложение. Вот и хотелось бы услышать мнение людей имеющих практический опыт с приложениями корпоративного уровня,правильный ли это подход и если можно поделиться ссылками на исходники реальных проектов с такой архитектурой.
P.S  не очень понимаю почему модераторы перекинули в WPF и Silverlight, так как вопрос больше о архитектуре чем  конкретно об этих техноглогиях
PM MAIL   Вверх
Gvozdin
Дата 21.12.2011, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 172
Регистрация: 9.8.2011
Где: Москва

Репутация: 8
Всего: 8



В общем все так, уровень данных(linq to sql), потом уровень бизнес логики. А вот PersonViewModel чем собственно занимается?

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

Далее уже идет смешанный режим работы в зависимости от ситуации. Либо работаем через наш ORM, загружая, изменяя и сохраняя данные. Либо же вызываем сервисные методы которые реализуют бизнес логику.

Слой доступа к данным генерируется сам.
Если на стороне сервисов нужен класс реализующий бизнес логику - то его надо сделать.
Если на стороне клиента нужен класс реализующий бизнес логику - то его тоже надо сделать.

Если есть требования по четкому разделению слоёв или это что-то дает, то вполне можно это все реализовать.
--------------------
http://gvozdin.ru
PM MAIL WWW   Вверх
GRemlin87
Дата 21.12.2011, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 12.2.2011

Репутация: нет
Всего: нет



ViewModel   хранит логику для представления например какой элемент в данный момент выделен ну и реализует интерфейс INotifyPropertyChanged, это по шаблону mvvm, ну в общем спасибо за то что разрешили мои сомнения по поводу моего подхода. Ещё бы кто помог ссылками на реальные проекты..
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




[ Время генерации скрипта: 0.0814 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.