C# 设计一个班级

C# 设计一个班级,c#,.net,design-patterns,frameworks,C#,.net,Design Patterns,Frameworks,我正在设计一个由其他类的对象组成的类,现在我接受通过函数参数实例化这个类的值。此类是在每个会话中创建的(从用户登录到注销)。对于会话,UserInteraction对象将是全局的,即:-它可以在任何时间从任何文件中使用。我计划在用户登录时为对象分配内存,以便每次用户登录时对象都是“新的” 然而,我感觉我做的事情不对。如果我可以使用任何其他模式来改进代码,请给出建议 class UserInteraction { private UserDetails _loginDeta

我正在设计一个由其他类的对象组成的类,现在我接受通过函数参数实例化这个类的值。此类是在每个会话中创建的(从用户登录到注销)。对于会话,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; }
        }
    }

在设计某个类之前,至少要弄清楚它的职责和协作(它依赖于其他对象来履行职责)

试着想想谁将实例化/使用这个对象,它的生命周期,以及它将如何/何时被销毁

明确这些基本设计原则)


正如@Thomas Levesque所提到的,“不要试图在不需要的地方应用模式…”,它们只是对良好设计原则的扩展。

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

试着想想谁将实例化/使用这个对象,它的生命周期,以及它将如何/何时被销毁

明确这些基本设计原则)


正如@Thomas Levesque所提到的,“不要试图在不需要的地方应用模式…”,它们只是对良好设计原则的扩展。

在实例化类用户交互时,可以避免使用构造函数,如下所示

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; }

在实例化类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; }

如果您已经阅读了KK4SO的优秀建议,并且仍然需要它,那么您可以尝试实现一个单例模式:

如果您已经阅读了KK4SO的优秀建议,并且仍然需要它,那么您可以尝试实现一个单例模式:

编写起来更简单

Class UserInteraction
{
    public UserDetails UserInfo { get; set; }
    public PrintStatus Status { get; set; }
    public IList<UserFiles> FilesDownloaded { get; set; }
}
类用户交互
{
public UserDetails UserInfo{get;set;}
公共打印状态状态{get;set;}
公共IList文件下载{get;set;}
}
正如我们所看到的,这个类实际上没有任何功能。我首先要问的问题是,
UserInteraction
某个抽象实体,是什么将这些信息绑定在一起的。你说的“全球”是什么意思

“在这里吃蛋”我用流利的英语描述了我的问题和我想要达到的目标。然后我把我所用的每个名词都看作是可能的类名。这是否正确取决于问题的背景

编辑它听起来像是你想要的,或者可能是一个单例来保存用户的
IList

编写起来更简单

Class UserInteraction
{
    public UserDetails UserInfo { get; set; }
    public PrintStatus Status { get; set; }
    public IList<UserFiles> FilesDownloaded { get; set; }
}
类用户交互
{
public UserDetails UserInfo{get;set;}
公共打印状态状态{get;set;}
公共IList文件下载{get;set;}
}
正如我们所看到的,这个类实际上没有任何功能。我首先要问的问题是,
UserInteraction
某个抽象实体,是什么将这些信息绑定在一起的。你说的“全球”是什么意思

“在这里吃蛋”我用流利的英语描述了我的问题和我想要达到的目标。然后我把我所用的每个名词都看作是可能的类名。这是否正确取决于问题的背景


编辑它听起来像是你想要的,或者可能是一个单身汉持有一个
IList
的用户

是什么让你认为这段代码有问题?不要试图在不需要的地方应用模式…有多少用户同时在线?您的缩进可能需要一些改进。但除此之外,这里还有一个具体的问题吗?是什么让你认为这段代码有问题?不要试图在不需要的地方应用模式…有多少用户同时在线?您的缩进可能需要一些改进。但除此之外,这里还有一个具体的问题吗?+1,尽管我不理解你的上一句话,但请详细说明。@jgauffin我的意思正是@Thomas Levesque在他的评论中提到的。那么为什么不问这个问题呢?也许,最新的编辑对@jgauffin和@Jodrell:)+1应该没问题,虽然我不理解你的上一句话,但请详细说明。@jgauffin我的意思正是@Thomas Levesque在评论中提到的。那么为什么不问这个问题呢?也许,最新的编辑对@jgauffin和@Jodrell:)应该没问题