Как смоделировать структуру этого предмета? - PullRequest
0 голосов
/ 30 марта 2012

Извините, если это дубликат.

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

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

Сотрудник предложил другой подход, при котором не нужно проверять тип элемента;вместо этого метод базового класса будет иметь метод hasEnoughStock ().Для товаров со склада будет переопределен метод для проведения реальных проверок, товары без товара просто вернут некоторую истинную стоимость (т. Е. У них всегда достаточно запасов).Я думаю, что мой коллега имеет лучший подход;однако мне кажется немного забавным иметь функцию проверки запасов на предмет, который на самом деле не имеет реальных запасов.

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

Мы планируем сделать это в C #, если это будет иметь какое-либо значение.

Заранее спасибо

Ответы [ 3 ]

1 голос
/ 30 марта 2012

Я также думаю, что подход с общей функцией в базовом классе является правильным. Если у вас есть сомнения относительно имени hasEnoughStock(), как насчет функции с именем canAddToCart()? `

Класс нестандартного товара просто вернет true или выполнит некоторые другие проверки, класс стокового товара вызовет приватную функцию с именем hasEnoughStock(), например:

public class NonStockItem : Item {
    public override bool canAddToCart () {
        return true;
    }
}


public class StockItem : Item {
    public override bool canAddToCart () {
        return haveEnoughStock();
    }

    private bool haveEnoughStock () {
        return ... doStockCheckHere;
    }
}
1 голос
/ 02 апреля 2012

Вот мой взгляд на это.

Допустим, у вас есть класс WashingMachine.Задача объекта WashingMachine - стирать белье.Стиральная машина не обязана рассчитывать налог, проверять, нет ли его на складе или есть на складе.

Расчет налога является обязанностью Биллинга, и проверять, является ли его нет на складе, обязанностьо чем-то еще.

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

Class Item
{

}

//Lack of creativity, I just named it as Manager. You can come up with more appropriate name,
Class Manager
{
   //Determine weather the item is with stock or without stock.


 }

 Class Shoppingcart
 {
     //Instantiate Manager.
     //Invoke the method which determines stock or out of stock.

 }

Надеюсь, это поможет.

0 голосов
/ 30 марта 2012

Подход вашего коллеги кажется разумным - если это поможет, вы можете думать о не имеющемся на складе предмете (например, в электронной книге) как о виртуальном запасе. Это просто семантика, но вы можете называть свое свойство / метод тем, что вам нравится, это не обязательно должно быть «hasEnoughStock» - это может быть «IsAvaialble» или «ValidItem». все, что кажется вам наиболее логичным.

...