Как бы вы классифицировали этот тип дизайна для классов? - PullRequest
5 голосов
/ 20 мая 2009

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

Это неправильно? Это анти ООП?

User.cs

public class User
{

    public string Username { get; set; }
    public string Password { get; set; }
}


Users.cs


public class Users
{
    public static User LoadUser(int userID)
    {
            DBProvider db = new DBProvider();
            return dp.LoadUser(userID);

        }

}

Ответы [ 6 ]

3 голосов
/ 20 мая 2009

В то время как ваш класс user.cs предоставляет себя для объекта переноса домена , класс Users.cs, по сути, используется для применения бизнес-правил в объектах доступа к данным .

Возможно, вы захотите подумать об именовании ваших классов вместе с пространствами имен. Когда я смотрю на файл users.cs, я предполагаю, что по сути это будет класс для работы со списком пользователей.

Другим вариантом может быть поиск в Active Record Pattern , который объединит два созданных вами класса.

User.cs

public class User
{
    public string Username { get; set; }
    public string Password { get; set; }

    public User(int userID)
    {
        //data connection
        //get records
        this.Username = datarecord["username"];
        this.Password = datarecord["password"];
    }
}
1 голос
/ 20 мая 2009

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

Однако мнения разделились относительно того, имеет ли смысл помещать логику доступа к БД в саму модель домена (шаблон активной записи) или, как в вашем коде, в отдельный класс (шаблон объекта доступа к данным), поскольку доступ к БД отдельная техническая проблема, которая не обязательно должна быть тесно связана с моделью предметной области.

1 голос
/ 20 мая 2009

Я думаю, что вы реализуете модель домена и объект доступа к данным . Это хорошая идея.

1 голос
/ 20 мая 2009

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

Второй класс может быть классифицирован как DAO (объект доступа к данным).

Этот паттерн не является антиопадным и широко используется.

0 голосов
/ 20 мая 2009

Это не совсем объектно-ориентированный в любом смысле, так как объект представляет собой не что иное, как склеивание данных. Не то чтобы это ужасно.

0 голосов
/ 20 мая 2009

Похоже, это может быть шаблон репозитория , который, похоже, становится все более распространенным шаблоном и используется для большого эффекта в Пример магазина Роба Конери * Asp.Net MVC.

Вы в основном абстрагируете свой код доступа к данным от Модели, что, как правило, хорошо. Хотя я бы надеялся на немного смелости для модельного класса. Также из предыдущего опыта, называя его «Пользователи сбивают с толку», UserRepository может быть лучше. Также, возможно, стоит рассмотреть возможность удаления статики (это горячая дискуссия), но облегчает насмешки. Кроме того, в репозитории должен быть реализован интерфейс, чтобы вы могли его смоделировать и, следовательно, позже заменить на фальшивку.

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