我听过无数次“不应该将业务逻辑与其他代码混合使用”或类似的说法。我的意思是,我认为我编写的每一行代码(我指处理步骤)都包含与业务需求相关的逻辑。
有没有人能告诉我业务逻辑到底包括哪些内容?它如何与其他代码区分开来?是否有一些简单的测试方法来确定哪些是业务逻辑而哪些不是?
我听过无数次“不应该将业务逻辑与其他代码混合使用”或类似的说法。我的意思是,我认为我编写的每一行代码(我指处理步骤)都包含与业务需求相关的逻辑。
有没有人能告诉我业务逻辑到底包括哪些内容?它如何与其他代码区分开来?是否有一些简单的测试方法来确定哪些是业务逻辑而哪些不是?
用简单易懂的语言描述你正在做的事情。当你表述业务内容时,比如“让那些人蒙受损失”、“窃取那笔钱”、“摧毁这部分地球”,你在谈论业务层面。更明确地说,让你兴奋的事情属于该层次。
当你说“在这里展示这个”,“不要展示那个”,“让它更美观”时,你在谈论演示层面。这些是让设计师感到兴奋的事情。
当你说“保存这个”、“从数据库获取这个”、“更新”、“删除”等内容时,你正在谈论数据层面。这些是告诉你要以任何代价永久保留的东西。
说起什么是业务逻辑,也许更容易的是先说出什么不是业务逻辑。访问数据库或磁盘并不是业务逻辑,用户界面也不是业务逻辑,网络通信也不是业务逻辑。
对我而言,业务逻辑是描述企业运营方式的规则,而不是软件体系结构的运行方式。业务逻辑也往往会变化。例如,可能需要每个客户账户关联一个信用卡,这一要求可能会改变为客户可以拥有多张信用卡。理论上,这只应该是业务逻辑的变化,软件的其他部分不应受到影响。
但在现实世界中(正如你所发现的),业务逻辑往往会遍布整个软件系统。在上述示例中,您可能需要向数据库添加另一个表来保存额外的信用卡数据。您肯定需要改变界面。
“纯粹主义者”认为业务逻辑应始终完全独立,因此甚至反对在数据库中使用“Customers”或“Accounts”等命名表。如果走极端,您最终将得到一个非常通用,难以维护的系统。
显然,保持大部分业务逻辑集中在一起而不是遍布整个系统有很有力的论据,但是(就像大多数理论一样),你需要在实际环境中保持实用主义。
我不喜欢BLL+DAL层的名字,它们更容易混淆而不是澄清。
改成DataServices和DataPersistence会更容易理解。
服务层(Service)用于数据操作,持久化层(Persistence)则负责CRUD(Create, Read, Update, Delete)。
业务逻辑是纯抽象的,它存在于用户面前数据的实现/可视化之外,也独立于底层数据的持久性。
例如,在税务准备软件中,业务逻辑类的一个职责是计算应缴税款。它们不负责显示报告或保存和检索税务申报表。