Когда лучше использовать новый класс, а не добавлять его в существующий класс

У меня есть класс Player на бизнес-уровне моего веб-приложения.

Класс игрока имеет поля PlayerID, CategoryID и CountryID.

Функция в классе Player вызывает функцию в классе PlayerDB на уровне доступа к данным, которая, в свою очередь, вызывает хранимую процедуру, которая возвращает данные для PlayerID, CategoryID (внешний ключ к таблице категорий) и CountryID (внешний ключ к таблице стран) из таблицы Player. .

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

Мой вопрос: добавить ли название страны и изображение страны в качестве дополнительных полей в класс Player или у меня есть новые классы, называемые Country (BLL) и CountryDB (DAL), и новый хранимый процесс?

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

Если это уместно, я использую ASP.NET, VB.NET и SQL2005.

Как вы, наверное, заметили, я новичок, поэтому простите меня, если я не использовал правильную терминологию в своем вопросе. Надеюсь, вы уловили идею.


person Cunners    schedule 27.02.2009    source источник


Ответы (5)


Вы можете создать класс страны и, используя композицию объектов, сделать класс страны свойством класса игрока.

Public Property Country() as BLL.Country
' etc

Затем вы вызовете такие методы:

Dim p as BLL.Player
a = p.Country.ID
b = p.Country.Name
c = p.Country.Image
d = p.ID
e = p.CategoryID
person HardCode    schedule 27.02.2009

Создайте новый класс. Если это имеет смысл как отдельная логическая сущность, то это должен быть собственный класс.

person Davy8    schedule 27.02.2009

Похоже, вам, вероятно, следует создать новый класс.

Это зависит от того, как используется класс «Игрок». Если это общий тип (и похоже, что это так), который используется в нескольких частях вашего приложения, добавление настройки для одной части вашего приложения в класс Player, вероятно, является плохой идеей.

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

person Richard Nichols    schedule 27.02.2009

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

Всегда.

person Bill K    schedule 27.02.2009

Как вы собираетесь использовать данные по стране? Вы собираетесь все время писать player.getCountry().getName()? Если это так, вы можете написать функцию player.getCountryName(), которая вызывает country.getName() внутри.

Ознакомьтесь с Законом Деметры, в котором говорится, что вы должны ограничить то, что ваши абоненты знают о вашем внутреннем устройстве. .

person Kevin Lacquement    schedule 27.02.2009