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

在大部分CRUD应用程序中绕过业务层可以吗?

  •  1
  • jmrah  · 技术社区  · 10 年前

    我正在开发一个应用程序,其中绝大多数功能是数据库表和视图之间的一对一映射。到目前为止,它是一个纯粹的CRUD应用程序。

    然而,也有少数情况涉及一些业务规则。例如,如果用户正在创建“受限测试”,则需要输入公司信息,但如果不是“受限测试“,则公司信息是可选的。

    在这些场景中,让视图直接使用数据库对象而不使用中间业务对象,并且只在涉及业务规则的情况下实现业务对象,这是否可行?

    作为附带问题,我使用的是ORM框架,它不允许我在实体字段上实现getter/setter代码。因此,这些实体对象上的所有字段基本上都是公共的,可以随意更改。这是否有足够的理由为每个实体类创建一个“业务对象”,以保护诸如PK等的不变量?

    编辑:

    我确实找到了马克·席曼(Mark Seemann)的一篇非常有用的帖子,似乎很好地回答了我的一半问题。 http://blog.ploeh.dk/2012/02/09/IsLayeringWorththeMapping/

    2 回复  |  直到 10 年前
        1
  •  1
  •   piotrek    10 年前

    是的,在crud中绕过服务是可以的。生成积垢是可以的,但是。。。你确定6个月后它还是一个原油吗?你能预测新的业务需求吗。因为如果新的逻辑出现,它会慢慢地出现,一个又一个需求。你会注意到需要重写分层的时刻吗?你是否能够说服企业,你需要时间和金钱来支付这种变化?和其他开发人员花时间重写代码?

    所以从设计的角度来看:是的,这是完全可以的。但在现实生活中,这可能是危险的

        2
  •  0
  •   Ameer Tamboli    10 年前

    理想情况下,您应该使用业务层,尤其是在使用ORM时。当您使用ORM时,实体相互引用。

    您永远不知道何时需要拆分、合并传入的业务对象以适应数据层。

    你永远不知道以后是否要添加一些业务逻辑。因此,最好有一个单独的层,即使你现在不进行转换。