C #: где поставить метод "save ()"? - PullRequest
1 голос
/ 28 октября 2009

У меня есть вопрос, вот пример
У меня есть модель класса: сток


    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's properties.
            stock.StockName = ...
            stock.StockCode = ...
        }
    }

Итак, мой вопрос, у меня есть метод "Сохранить ()", куда я должен поместить
Вариант 1: поместите его в класс Stock,


    public class Stock{
        public void Save(){
            //use the repository to save into db.
        }
    }

Вариант2: поместить его в класс обслуживания


    public class StockService:IStockService{
        public void Save(Stock stock){
            //use the repository to save into db.
        }
    } 


я думаю, что для option1: акция кажется немного умной, она может спасти себя и более ориентирована на ojbect. И для варианта 2 я видел, как многие парни используют этот тип паттернов. Что ты думаешь?

Ответы [ 5 ]

8 голосов
/ 28 октября 2009

Помещение метода Save () в службу не позволит классу Stock требовать каких-либо знаний о структуре базы данных. Помещение Load () и Save () в два разных класса также, вероятно, может сбить с толку.

5 голосов
/ 28 октября 2009

Возможно, вы захотите прочитать как шаблон Active Record , так и шаблон Repository . Вы здесь где-то посередине.

Active Record считается «более простым», а Repository более «чистым» в том смысле, что вы получаете лучшее разделение интересов (ваши сущности не должны беспокоиться о доступе к данным).

1 голос
/ 28 октября 2009

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

0 голосов
/ 28 октября 2009

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

0 голосов
/ 28 октября 2009

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

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