c#同步逻辑,用于在代码或SQL中将项目列表持久化到数据库?
我在UI中显示了一个项目列表。 它们的形式如下: 名称(下拉)、属性1(文本框)、属性2(文本框) 名称作为一个唯一的键来识别一个唯一的项(主键)
这些值显示在列表中,用户可以选择创建、更新属性 并从列表中删除值
现在假设用户删除了一些属于UI中某一行的项目,然后添加了属于相同名称的新项目
然后用户按save键查看整个项目列表
现在,为了实现这种情况下的持久性逻辑,我有多个选项:
- 我在SQL级别执行所有业务逻辑 我必须确保数据库中没有输入重复的名称,因此我在数据库级别处理这个问题,方法是编写SQL查询,以便查询首先检查是否存在类似名称的条目,如果存在,则更新其他条目李>
- 我在代码级别执行业务逻辑,即在保存、比较和同步匹配项时重新加载所有数据,然后决定必须插入某些项并删除其他项李>
- 我在每个项目上维护一个IsDirty标志,当客户端发生任何更改时,我更新IsDirty,任何标记为IsDirty的项目都必须更新,添加的任何新项目仍必须在SQL级别检查重复名称。但这种方法的不同之处在于,我们不必从数据库中重新加载数据李>
- 我从数据库中删除所有项目,然后重新插入UI中的所有项目(我想这是最糟糕的方式)李>
我应该选择哪个选项?为web应用持久化项目列表的最佳实践是什么
同步逻辑应该去哪里
在数据库级别设置一些同步逻辑,并检查是否存在名称,而不是插入,只是更新,这是否明智
这种逻辑应该存在于SQL级别还是代码级别(比如Java或C#级别)
这个有什么名字(设计模式)吗
# 1 楼答案
@SeaHorse:正如你所说,第四项是世界上最糟糕的。。所以请毫无疑问地忽略这个选项
如果我需要做出决定,我会选择1)方法,在数据库端创建CRUD存储过程,并在域上创建逻辑,只调用存储过程。使用这种方法,如果需要重构某些内容,可以避免打开域代码,相反,可以在存储过程上快速执行代码更新,这些存储过程是更模块化、更易于管理的组件