代码之家  ›  专栏  ›  技术社区  ›  nightcoder

基础商务舱:坏吗?

  •  2
  • nightcoder  · 技术社区  · 16 年前

    我想创建我的基本业务类,类似EntityBase,以具有一些常见行为,例如实现接口来跟踪对象(IsNew,IsDirty)和INotifyPropertyChanges接口中的更改。

    但是许多人说,拥有一个基本的业务类并从中派生出所有的业务对象是一个坏主意。通常他们说实体类中有表示代码是不好的。但我认为这只是一个理论。实践中什么是不好的?他们说:你自己试试。通常不会再有争论了。

    你们觉得呢?是好是坏?如果不好,为什么?请,试着做一个务实的人,而不是理论上的人。

    5 回复  |  直到 16 年前
        1
  •  2
  •   Brian Rasmussen    16 年前
        2
  •  1
  •   Anders Öhrt    16 年前

    很糟糕。我们已经这样做了好几年了,我们在基类中没有任何东西可以通用到可以应用于所有继承类。

        3
  •  0
  •   Jorge Villuendas Zapatero    16 年前

    从面向对象设计的角度来看,这可能不是最优雅的解决方案,但如果要使用数据绑定,通常最好在基类中实现INotifyPropertyChanged。这样,您就可以最小化在所有实体中实现它的负担。

    Unit of Work 模式(pattern),如果您希望将此职责与基类分离,尽管在不依赖于ORM的.net应用程序中看到实现更改跟踪是非常常见的。

        4
  •  0
  •   tvanfosson    16 年前

    如果业务实体不需要从这些基类派生,那么拥有一组接口和基类来实现那些接口,这些接口提供一些您希望在业务实体中使用的通用功能,我认为这并不一定是坏事。这为您提供了灵活性,同时提供了实现的便利性。

    例如,我有一个IValidatedEntity接口,它几乎应用于我创建的每个业务对象。它要求业务对象实现一些验证规则。但是,我的审计对象只在内部创建,我使用单元测试来确保我不能创建无效的审计对象,这样这些类就不会实现IValidatedEntity接口

    我的大多数从web获取输入并包含字符串数据的类都来自XSSValidatedEntity类(它实现了IValidatedEntity接口),但是通过HTML解析器提供XSS检查,以防止将HTML注入数据库。对于我的大多数类来说,这工作得很好,但是在那些我希望允许有限(安全)HTML的情况下,我显然不能从这个类派生。

        5
  •  0
  •   David Robbins    16 年前

    您描述的内容听起来更像一个表示对象,但是IsDirty和IsNew也可以用于域模型。在决定在基本对象中包含什么之前,您应该清楚地了解业务需求是什么。先关注一下业务对象,需求会有多静态?你是否掌握了控制对象交互方式的所有规则,这些规则是否会改变?如果他们改变,多久一次?这对你来说可能是最具挑战性的

    您可能会发现,根据应用程序的不同,您的大部分工作应该来自于实现业务流程,从而实现CRUD功能的体系结构。虽然重要,但不是你努力的重点。换句话说,您的业务对象将支持业务流程的概念,而不包括IsDirty。然后,数据访问层可以集中于记录的状态,并确定是插入还是更新数据。