代码之家  ›  专栏  ›  技术社区  ›  Peter Lange

C#架构问题

  •  0
  • Peter Lange  · 技术社区  · 16 年前

    相当地 一个O/RM项目。)DomainObject维护对象更改状态(脏/干净),并允许回滚或提交它自己(AcceptChanges(),RejectChanges())。当对对象调用AcceptChanges()时,它将触发一个事件,该事件将触发将hte值写入底层数据存储。此外,它还传递一个参数,允许在事件中取消持久性。


    2) 调用classification.AcceptChanges(),触发OnAcceptEvent并传递DomainObjectChangeEventArgs,其中包含一个名为Cancel的布尔属性
    3) 如果事件未取消,则接受更改并更新课堂状态。
    4) 然后,该项目将对同时也是DomainObject的任何内部属性(如Student)调用AcceptChanges。
    5) 每个学生触发传递DomainObjectChangeEventArgs…等的OnAcceptEvent。

    现在,请广大社区:

    A) 您是否会让教室的AcceptEvent上的cancel指示器停止整个过程,迫使其不再评估并可能接受任何学生,或者您是否会将cancel编码为仅应用于教室。

    我最初的想法是,课堂事件上的取消指示器应该停止整个过程,因此允许在不涉及事务开销的情况下,优雅地保留课堂和所有学生预先接受的状态。但我并不一定确信我是正确的。

    你会怎么做?

    4 回复  |  直到 16 年前
        1
  •  1
  •   Ali Shafai    16 年前

    我想你有钱了。

        2
  •  1
  •   Brian ONeil    16 年前

    是的,无论哪种情况,你都应该取消整个过程。您在对象图的根上调用accept,因此使用者的期望是整个图被持久化。我认为这是一种要么全有要么全无的情况。

        3
  •  1
  •   corlettk    16 年前

    我将调用事件CanSave,它返回一个枚举{OK,Cancel}。在持久化任何内容之前,我会查询整个对象图,查找取消。每个对象都可以验证自身,如果当前不在

    但是取消怎么办呢?优秀软件的一条主要法令是“软件” 始终 程序员不会遵守一个不会保存不可编译的源代码的IDE,那么为什么你希望你的用户能忍受它呢?

    取消状态 成为真正的例外国家。。。例如,无法写入只读文件-->而是“另存为”?或空键字段-->“需要用户名”。

    那么,还有什么选择呢?保存为中间格式,可以存储“无效”数据。。。就像一个文本文件。

    旁白:我经常认为数据库应用程序缺少一个“验证”按钮,允许用户在没有实际提交的情况下找出“这行吗?”。

    值得思考。

    干杯基思。

        4
  •  1
  •   TheVillageIdiot    16 年前

    如果说向类中添加学生只修改类的状态(例如,如果您将哪个学生存储在单独的表中,类中可以有更多学生的数量等),那么您不需要完全保留学生对象。

    如果添加到此类或从此类中删除会修改student类(如他们可以接受的更多类的数量等),则还应将取消传播到student对象。