c # объект / основы дизайна - PullRequest
0 голосов
/ 01 марта 2012

Это стандартный, хороший способ ведения дел? В основном вернуть список себя? Должны ли фактические поля (id, title и т. Д.) Быть отдельным классом? (Я видел, как люди называют это объектами DTO)

Я начинаю проект и хочу попробовать и разобраться с некоторыми из этих основ -

Спасибо !!

public class Calendar
{
    public int id { get; set; }
    public string title { get; set; }

    public List<calendar> GetAll()
    {
        var list = new List<calendar>();

        var db = new mssql2();
        db.set("s1");
        string sql = @"select * from [cal]";
        var dr = db.dr(sql);
        while (dr.Read())
        {
           var e = new calendar();
           e.id = (int)dr["id"];
           e.title = dr["title"].ToString();
           list.Add(e);
        }
        return list;
    }
}

Ответы [ 3 ]

7 голосов
/ 01 марта 2012

Похоже, вы смешиваете модель своего Домена со слоем доступа к данным.

Сохраните Календарь как свой собственный класс и, возможно, создайте другой класс с именем CalendarService или CalendarRepository, который вернет вам список Календаряобъекты.

Вот пример:

public class Calendar
{
    public Calendar() { }
    public Calendar(int id, string title)
    {
       Id = id;
       Title = title;
    }
    public int Id { get; set; }
    public string Title { get; set; }
}

public class CalendarService
{
    public static List<Calendar> GetAll()
    {
        var list = new List<Calendar>();

        var db = new mssql2();
        db.set("s1");
        string sql = @"select * from [cal]";
        var dr = db.dr(sql);
        while (dr.Read())
        {
            // Use the constructor to create a new Calendar item
            list.Add(new Calendar((int)dr["id"], dr["title"].ToString()));
        }
        return list;
    }
}
2 голосов
/ 01 марта 2012

Общая идея состоит в том, чтобы классы представляли объекты домена , а члены класса - различные свойства этих объектов домена .Функции класса представляли бы , что могут делать объекты .

В вашем случае было бы более целесообразно удалить get_all() в некоторый класс, абстрагирующий операции базы данных класса.Calendar будет иметь функциональные возможности календаря (получение / установка некоторых дат, получение пропущенных лет, получение / установка некоторых встреч);в зависимости от того, что вы хотите сделать с календарем.

Object design

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

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

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