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