проектирование класса - PullRequest
0 голосов
/ 07 июня 2011

Я разрабатываю класс, который состоит из объектов других классов, сейчас я принимаю значения для создания экземпляра этого класса через параметры функции. Этот класс создается за сеанс (от входа пользователя до выхода). Для сеанса объект UserInteraction будет глобальным, т.е. он может быть использован из любого файла в любое время. Я планирую выделить память для объекта при входе пользователя в систему, чтобы при каждом входе пользователя объект был «новым».

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

class UserInteraction
    {
        private UserDetails _loginDetails; // information of the user logged in.
        private UserFiles[] _userFilesDownloaded; // files downloaded for the user.
        private PrintStatus _printStatus;   // Details of files printed 

        public UserInteraction() { }

        public UserDetails UserInfo {                
            get { return _loginDetails; }
            set { _loginDetails = value; }
        }

        public PrintStatus Status {
            get { return _printStatus; }
            set { _printStatus = value; }
        }

        public UserFiles[] FilesDownloaded {
            get { return _userFilesDownloaded; }
            set { _userFilesDownloaded = value; }
        }
    }

Ответы [ 4 ]

3 голосов
/ 07 июня 2011

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

Постарайтесь подумать, кто будет создавать / использовать этот объект, его жизньвремя и как / когда оно будет уничтожено.

Будьте ясны с этими фундаментальными принципами проектирования http://en.wikipedia.org/wiki/Solid_(object-oriented_design).

Как упомянул @Thomas Levesque: «Не пытайтесь применять шаблоны там, где они»не нужны ... ", они просто являются продолжением хороших принципов дизайна.

1 голос
/ 07 июня 2011

Проще написать

Class UserInteraction
{
    public UserDetails UserInfo { get; set; }
    public PrintStatus Status { get; set; }
    public IList<UserFiles> FilesDownloaded { get; set; }
}

Как мы видим, этот класс действительно имеет какую-либо функциональность. Вопросы, с которых я бы начал, это UserInteraction некая абстрактная сущность, которая связывает эту информацию вместе. Что вы подразумеваете под глобальным?

«Сосать яйца здесь». Я описываю свою проблему и то, чего я хочу достичь на хорошем английском. Затем я рассматриваю каждое существительное, которое я использовал, как возможное имя класса. Правильно это или нет, зависит от контекста вашей проблемы.

РЕДАКТИРОВАТЬ Звучит так, как будто вы хотите Singleton Pattern , или, возможно, синглтон для IList пользователей

0 голосов
/ 07 июня 2011

Если вы прочитали отличный совет от KKK4SO и все еще хотите это, вы можете попробовать реализовать шаблон Singleton: Реализация Singleton в C #

0 голосов
/ 07 июня 2011

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

UserInteraction obj = new UserInteraction
{
     UserInfo = some Value;
     Status   = some Value;
     FilesDownloaded = some Value;
};

Get и Set не требуются, если свойство доступно для чтения / записи.В моем понимании это можно написать следующим образом.

public UserDetails UserInfo{ get; set; } 
public PrintStatus Status{ get; set; } 
public UserDetails UserInfo{ get; set; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...