Таблица Child-Parent: где я должен поместить метод в 2 классе? - PullRequest
2 голосов
/ 23 февраля 2009

У меня есть две таблицы с родительскими и дочерними отношениями, и я все еще не понимаю, как отобразить их в класс из таблиц. Простой класс, который инкапсулирует методы и не использует Business Object / Value Object. Таблицы по категориям и продуктам.

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

Создать Объект категории и вызвать GetProductsByGroup (int groupId)

или

создать Объект продукта и вызвать GetProductsByGroup (int groupId)

Какой класс должен владеть методом?

Ответы [ 4 ]

3 голосов
/ 23 февраля 2009

Ни один из них.

Почему?

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

Продукт: Продукт имеет категорию, но не знает о других продуктах этой же категории.

Где тогда?

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

Пример: * * один тысяча двадцать-одна

public static class ProductRepository
{
    public static Collection<Product> GetProductsByGroup(int groupID)
    {
         ...
    }
}
2 голосов
/ 23 февраля 2009

Каковы основные отношения метода - Продукты. Таким образом, я бы поместил его в класс Products, поскольку он будет обрабатывать все, что связано с продуктами. Аналогично, у класса Category может быть множество методов для обработки, запроса и изменения категорий.

0 голосов
/ 23 февраля 2009

краткий ответ: ни один. Вместо этого вам нужен класс коллекции.

в общем случае класс будет представлять одну строку в таблице, а коллекция будет представлять таблицу или ее подмножество.

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

0 голосов
/ 23 февраля 2009

Это в значительной степени зависит от вас, но я бы сделал следующее различие:

Если метод относится к классу Product, сделайте его статическим методом.

Если метод находится в классе Category, не делайте его статичным.

Если это то, к чему вы собираетесь часто обращаться, вы можете подумать о том, чтобы сделать его свойством объекта Category, который лениво загружает Продукты для этой категории. То есть при первом обращении к свойству он получает Продукты из базы данных и сохраняет их в вашем объекте Category; последующие вызовы затем просто возвращают этот список, не посещая базу данных снова.

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