У меня есть вопрос, вот пример
У меня есть класс Model: Stock
public class Stock{
//some properties, stock name, stock code;
public String StockName{
get,set
}
public String StockCode{
get,set
}
}
Также у меня есть класс сервиса StockService, который загрузит данные из базы данных и создаст запас и установит значение свойства.
public class StockService:IStockService{
public Stock CreateStockByStockCode(string stockCode){
Stock stock = new Stock();
//load the data from db and set the stock properties.
stock.StockName = ...
stock.StockCode = ...
}
}
Итак, мой вопрос, у меня есть метод "Сохранить()", куда я должен положить,
Option1: поместите его в класс Stock,
public class Stock{
public void Save(){
//use the repository to save into db.
}
}
Option2: поместите его в класс обслуживания
public class StockService:IStockService{
public void Save(Stock stock){
//use the repository to save into db.
}
}
я думаю, что для опции 1: запас кажется немного умным, он может спасти себя и больше ориентироваться на ojbect. И для опции2 я видел, как многие парни используют этот тип рисунка. Что вы думаете?
Включение метода Save() в службу не позволит классу Stock требовать каких-либо знаний о структуре базы данных. Помещение Load() и Save() в два разных класса, вероятно, тоже будет довольно запутанным.
Возможно, вы захотите прочитать как Активный шаблон записи, так и шаблон хранилища. Вы находитесь где-то посередине.
Активная запись считается "более простой", в то время как репозиторий более "чист", поскольку вы получаете лучшее разделение проблем (ваши объекты не должны заботиться о доступе к данным).
Я предпочитаю вариант 2 из-за того, что вы только что сказали, потому что тогда "запас кажется немного умным". Я считаю, что это имеет немного больше смысла, например, когда вы хотите удалить свои запасы.
Я согласен, идите для варианта 2, чтобы вы отделили классы данных от фактического хранилища данных. Кстати, вы можете взглянуть на шаблон хранилища.
The Stock не должен заботиться о том, где он хранится, поэтому сохранение и загрузка должны быть в классе обслуживания imo.