工厂模式与易用性?

时间:2010-03-18 15:33:07

标签: asp.net design-patterns asp.net-membership class-design crud

后台,我正在使用自定义类和额外表扩展ASP.NET成员资格。

ASP.NET MembershipUser具有受保护的构造函数和用于从数据库读取数据的公共方法。我已经使用自定义表和关联类扩展了数据库结构。

不像在原始API中那样使用静态方法来创建新成员:我允许代码实例化一个简单的对象并填充数据,因为有几个实体。

原 模式#1受保护的构造函数

> static CreateUser(string mydata, string, mydata, ...) 
> User.Data = mydata;
> User.Update()

我的首选 模式#2公共构造函数

> newUser = new MembershipUser();
> newUser.data = ...
> newUser.ComplextObject.Data = ...
> newUser.Insert() 
> newUser.Load(string key)

我发现模式#2更容易使用更自然。但方法#1更具原子性并确保包含适当的数据。

我想听听有关利弊的任何意见。我的问题是我更喜欢一个简单的CRUD /对象,但我也试图利用底层API。这些方法完全不匹配。例如,API具有方法,如UnlockUser()和IsLockedOut的只读属性。

我可以看到有一些可能性。

选项#1 让对象保存/加载自身但需要私有构造函数。

选项#2 让对象保存/加载自己,但让它有一个公共构造函数

选项#3 一种是创建POCO /简单CRUD对象,然后使用静态方法更新数据库。 ..............

选项#1 优点:多线程安全“原子”,对象完整性 损害:难以使用 - >传递大量数据,可能需要在创建之后进行更新,这在某些情况下需要包装在事务中,因此看起来很混乱

选项#2 优点:易于使用,易于组织交易 缺点:对象可能会也可能没有正确设置

1 个答案:

答案 0 :(得分:1)

我更喜欢你的选择#2。我非常喜欢使用默认构造函数的对象。你说你喜欢#1,因为它迫使你把数据放入,但实际上,你应该对此进行验证,对吧?所以如果你有验证,为什么不依靠那些?如果你没有它们,那就把它们放进去吧! (不可否认,我更喜欢默认构造函数的一个主要原因是序列化,并且它更容易测试。)

价值0.02美元。