设计课程

时间:2011-06-07 08:04:51

标签: c# .net design-patterns frameworks

我正在设计一个包含其他类对象的类,现在我接受通过函数参数实例化该类的值。每个会话创建此类(从用户登录到注销)。对于会话,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 个答案:

答案 0 :(得分:3)

在设计某个类之前,至少要明确其职责和协作(它依赖的其他对象,以履行其职责)。

尝试思考谁将实例化/使用此对象,它的生命周期以及它将如何/何时被销毁。

明确这些基本设计原则http://en.wikipedia.org/wiki/Solid_(object-oriented_design)。

正如@Thomas Levesque所说,“不要试图在不需要的地方应用模式......”,它们只是对良好设计原则的延伸。

答案 1 :(得分:1)

编写简单

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

我们可以看到这个类doesent实际上有任何功能。我要开始的问题是,UserInteraction是一个抽象实体,是什么将这些信息绑定在一起。你是什​​么意思全球?

“在这里吮吸鸡蛋”我描述了我的问题以及我想用英语做什么。然后我考虑我用作可能的类名的每个名词。这是否正确取决于您的问题的背景。

编辑听起来您想要Singleton Pattern,或者可能是单身人士来容纳IList个用户

答案 2 :(得分:0)

您可以避免构造函数,同时实例化 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; }

答案 3 :(得分:0)

如果您已经阅读了KKK4SO的优秀建议,并且您仍然想要这样,那么您可以尝试实施Singleton模式:Implementing Singleton in C#