我正在设计一个新的应用程序,如果我应该在构造函数上填充我的对象属性,我还没决定
Public Sub New(UserId as integer)
' get database values
dr = DataReader
Me.FirstName = dr.fields(0)
Me.LastName = dr.fields(1)
End Sub
或者为每个对象类型创建一个带有方法的工厂?
Public Function getUser(UserId as integer) as User
Dim myUser as new User
' get database values
dr = DataReader
myUser.FirstName = dr.fields(0)
myUser.LastName = dr.fields(1)
return myUser
End Function
我意识到代码很粗糙,但我希望它足以让我的观点得到解决。我看到两者都已实施,并且不确定长期的利弊是什么。
具体来说,我正在使用VB.NET,如果重要的话。
答案 0 :(得分:3)
我的意见:
构造函数创建对象。 User
类的构造函数应创建新用户。
静态成员函数,例如getUser
检索已存在的对象。
我会使用后一种形式。
答案 1 :(得分:1)
我认为类型是不可变的,不会产生其他问题。对于“人”类型,它可能不合适,但值得考虑。您还应该尝试构造对象,以便在调用构造函数之后,对象处于有效状态。
另一方面,你应该尽量避免在构造函数本身做太多的工作 - 这是静态工厂方法往往很好的地方,因为他们可以做很多工作来获取构造对象所需的所有数据,然后将其传递给一个简单的构造函数,以创建一个完整,有效且可能不可变的对象。
答案 2 :(得分:1)
这实际上取决于语言,因为在构造函数和所有基础构造函数完成执行之前,某些语言无法保证对象的状态。
我发现最好填充你需要的任何成员,然后调用方法来完成剩下的工作。这往往会使代码更具可读性,因为构造函数中没有大量代码。
答案 3 :(得分:1)
我会使用Factory-Pattern并使构造函数为private / protected,并创建一个静态NewObject()方法。然后,NewObject方法可以调用适当的构造函数。 专家就是如果你需要在运行时更改Object的行为,你可以插入(覆盖)NewObject方法并让你自己的NewObject方法“混入”。 这样做的缺点是它可以非常快速地变得非常复杂 - 特别是如果你正在调试它。
答案 4 :(得分:0)
您正在实例化userhandler-object并使用它来获取不同的用户,并让您与所有用户一起工作。 在构造函数中没有GetUser函数。
您正在实例化userobject并仅与该用户一起工作, 让构造者handeling巫婆用户使用。
我5美分。
答案 5 :(得分:0)
对象在构造时应该100%准备好使用。默认构造函数应该具有适用于所有引用的合理的非null默认值。
如果您发现构造函数的代码“太多”,或许是时候考虑重构该对象了。