Советы по правильным занятиям - PullRequest
1 голос
/ 01 марта 2009

Я использую C #. У меня есть класс продуктов с такими полями, как sku, name, description .... и такими методами, как setSku, setDescription, setImages (к продуктам прикреплено изображение). Я держал эти методы внутри класса Product, но из-за большого количества настроек, доступных клиенту для настройки sku, описаний и изображений, класс становился действительно очень большим. В классе было много кода. Поэтому я собирался разбить большой класс Product на части, такие как класс ProductSku, класс ProductDescription ... и т. Д. Проблема здесь в том, что есть некоторые из тех же полей, которые должны быть доступны для всех классов. Я начал вызывать методы в этих отдельных классах и снова и снова передавать одни и те же объекты, но, похоже, это было неправильно. Итак, теперь я решил создать один глобальный (с использованием шаблона Singleton) класс CurrentProduct, в котором есть поля, необходимые для всех остальных созданных мной классов Product. Мои вопросы: это звучит правильно и что бы вы сделали?

Программа, над которой я сейчас работаю, на базовом уровне берет продукты из одной таблицы из базы данных1 и сохраняет продукты в таблицу в базе данных2. Однако пользователям доступно множество настроек того, как они хотят, чтобы поля, поступающие из базы данных1, выглядели при входе в базу данных2.

Чтобы уточнить: упомянутые выше методы set и get не являются методами getter и setter. Я использую свойства, однако назвал их установленными, потому что есть много кода, который используется для форматирования некоторых полей перед обновлением. Я понимаю путаницу и прошу прощения за то, что не разъяснил.

Ответы [ 3 ]

4 голосов
/ 01 марта 2009

Синглтон для текущего продукта звучит плохо. Вы просто вызываете глобальную переменную с другим именем.

Я не знаю, что такое Sku, но что касается остальных (описание и изображения), если они являются атрибутами продукта (как мне кажется, они), они принадлежат к классу Product.

Если вы много раздаете свои «классные части» вместе, это является сильным признаком того, что они принадлежат друг другу.

Если вы хотите, разделите код (не класс) на несколько файлов, используя ключевое слово partial. Как это:

// This file is Product.CodeAboutThingA.cs

public partial class Product
{
    // Some stuff related to A here...
}

И в другом файле:

// This file is Product.CodeAboutThingB.cs

public partial class Product
{
    // Some stuff related to B here...
}
2 голосов
/ 01 марта 2009

Чтобы дать мои 0,5 цента, класс, которым можно управлять только путем разбиения его на частичные, имеет некоторый запах кода. Разделение всего этого на несколько классов звучит хорошо, особенно если вы уже определили такие вещи, как SKU и т. Д., Как отдельный класс.

Вещи, которые вы должны спросить себя ...

  • Это нормально, если я могу получить доступ к SKU только через действительный экземпляр продукта? Даже если это просто идентификатор, такой идентификатор сам по себе может быть довольно сложным.
  • Каким образом SKU должен использовать материал из класса Product? Если продукт является единственным экземпляром SKU, возможно, можно передать продукт в SKU. Два класса теперь довольно тесно связаны, но все же лучше, чем один беспорядок в Продукте без семантики.
  • Можете ли вы определить, какие общие части должны быть общими для всех? Может быть, вам не хватает сущности или объекта значения, который является той «общей частью»?
  • Может быть, вы были бы счастливее с Product Builder вместо того, чтобы позволить Клиенту копаться во внутренностях экземпляра Product?

С моей точки зрения, когда у вас есть класс с 1k + строками кода, все еще остается много понимания, что такое ваш «Продукт» на самом деле и как он ведет себя в рамках вашего приложения ...

1 голос
/ 01 марта 2009

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

Другим ответом может быть создание abstract класса Product и наследование от него специализированных классов.

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