Silverlight LINQtoSQL: один большой класс данных или несколько маленьких? - PullRequest
0 голосов
/ 12 февраля 2011

Я новичок в Silverlight, но меня бросают в драку - хороший способ узнать, я полагаю: o)

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

1- Каков рекомендуемый подход, когда дело доходит до классов данных?Есть только один большой класс данных или попробуйте разделить его на несколько небольших классов данных, помня о том, что они должны будут ссылаться друг на друга?2- Если рекомендуемый подход состоит в том, чтобы иметь несколько классов данных, как вы определяете ссылки между классами данных?

Я спрашиваю, потому что я провел небольшой тест.В моей БД (здесь упрощенно, реальная модель более сложная, но это не важно), у меня есть таблица «Заказы» и таблица «Параметры».«Заказы» имеет внешний ключ на «Параметры».Я создал 2 класса данных.Первый, ParamClass , где я отбросил только таблицу «Параметры», чтобы я мог иметь хороший «параметр» класс.Затем я создал простой сервис для добавления базовой функциональности SELECT и INSERT.
Второй, OrdersClass , где я отбросил обе таблицы, так что связь между таблицами автоматически создаст «EntityRef * 1014».* "переменная внутри класса " порядок ".Затем я удалил класс «параметров», который был автоматически создан в классе данных OrdersClass, поскольку этот класс уже был объявлен в классе данных ParamClass.Я снова создал небольшой сервис для его тестирования.

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

OrdersServiceReference.order myOrder = new OrdersServiceReference.order();
myOrder.parameter = new ParamServiceReference.parameter();  //<-PROBLEM IS HERE

Он заявляет, что не может неявно конвертировать из типа'MytestDC.ParamServiceReference.parameter' в 'MytestDC.OrdersServiceReference.parameter'

Нужно ли мне как-то объявлять какую-то ссылку на ParamClass из OrdersClass, или как мне "преобразовать" одну в другую?Это даже рекомендуемый и эффективный способ сделать это?Поскольку это командный проект, я изначально хотел разделить классы данных, чтобы один (и их сервис) мог легко проверить один участник без проверки всего класса данных.

Любая помощь приветствуется!

PS: использование Silverlight 4, на случай, если это важно

Ответы [ 2 ]

1 голос
/ 12 февраля 2011

На основе широко принятого принципа одиночной ответственности (SRP) класс всегда должен отвечать за одну задачу и только одну задачу .

Это в значительной степени лишает законной силы ваш подход "один большой класс данных".

Я бы всегда рекомендовал меньшие, более управляемые биты, которые можно комбинировать, вместо одного огромного класса, который делает все (кроме приготовления кофе)для вас).

Ресурсы для SRP:

0 голосов
/ 18 февраля 2011

Хорошо, еще несколько исследований позволили мне сделать следующее: отделить классы от реляционной модели с помощью LINQtoSQL непросто.Я закончил тем, что переключился на подход Entity Framework, который сам по себе не справляется с этим изящно (см., Например, здесь и там ), но, по крайней мере, он решил другую важную проблему, которую ябыло с LINQtoSQL.Существуют и другие ORM, которые, по-видимому, гораздо более способны к этому (NHibernate часто упоминается в рекомендациях), к сожалению, у меня нет времени исследовать их сейчас, так как они находятся в столь сжатые сроки.

Какдля ссылки это было довольно просто, измените строку на:

myOrder.parameter = new OrderServiceReference.parameter();

, хотя я удалил объявление из этого класса данных.

Надеюсь, это кому-нибудь поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...