为什么模型应该更具抽象概念,而不是被业务属性束缚

2 评论 859 浏览 4 收藏 8 分钟

在产品开发中,我们常常会忽略一个重要的原则:“模型应该更具抽象概念,不应该赋予业务属性。”简单的一句话,值得我们深思。本文作者分享了他对这句话的理解和思考,大家可以参考。

昨天在项目群里讨论问题时,有个同事提到一个观点让我印象深刻:“模型应该更具抽象概念,不应该赋予业务属性。”简单的一句话,却揭示了一个我们在开发中经常忽略的重要原则。

今天就来聊聊这句话背后的深意,以及它为什么值得我们在模型设计中深刻反思。

01 什么是模型的“抽象概念”?

在软件开发中,模型是现实世界在系统中的抽象表达。比如,“用户”这个模型在最抽象的层面上,可以定义为:

  • 用户名
  • 密码
  • 邮箱
  • 唯一标识(ID)

这些属性是用户的本质,而与具体的业务无关。与之相对的是业务属性,比如:

  • 用户下了多少订单。
  • 用户的会员等级。
  • 用户是否参与了某次活动。

这些是与业务相关的逻辑,不属于用户的本质。模型的抽象性,就是专注于本质属性,而不是具体业务场景中那些容易变动的部分。

02 为什么模型设计要“去业务化”?

在项目开发中,把模型设计得过于贴合具体的业务场景,很容易埋下隐患。以下是几个关键原因:

1. 降低系统耦合,保持灵活性

业务逻辑是动态的、经常变化的。如果模型被绑定到具体业务属性上,那么每次业务调整时,模型都可能需要修改,导致系统的其他部分被连带影响。

举个例子:

如果“用户模型”包含“订单数量”字段,那么订单系统的改动会直接影响用户模型,甚至需要改动数据库结构。

这样的耦合让系统变得非常脆弱。而抽象模型通过专注本质,减少了这种相互牵绊的风险。

2. 提高模型复用性

一个好的抽象模型,可以在不同的业务场景中被复用。比如,一个抽象的“用户”模型,可以应用于:

  • 电商系统:用于下单和订单管理。
  • 社交平台:用于关系网络和用户动态。
  • 企业内部系统:用于人力资源管理。

如果模型里包含了业务属性,比如“购物车内容”或“朋友圈动态”,那么它就很难跨越场景复用,导致代码和逻辑的重复。

3. 支持业务演进

在一个快速变化的业务环境中,需求的变化往往比我们预期得更频繁。如果模型绑定了过多的业务属性,每次需求调整都会牵一发而动全身。

相比之下,抽象模型更像是一块稳定的基石,业务逻辑可以围绕它自由演变,而不会对核心结构造成过多干扰。

03 如何在实践中实现抽象模型设计?

知道了抽象模型的优势,那该如何在实际开发中实现呢?以下是一些可操作的设计方法:

1. 专注对象的本质

设计模型时,尽量只保留那些反映对象本质的属性。例如:

用户模型只包含“用户名”、“邮箱”等基本信息,而不是“是否参与某活动”这样的业务字段。

这样的设计可以保证模型的稳定性,避免被业务需求牵着走。

2. 业务逻辑外移

将复杂的业务逻辑从模型中移到服务层或领域对象中。比如:

“用户的订单统计”应该由订单服务来负责,而不是直接嵌入用户模型。

通过分层设计,我们可以将模型和业务逻辑解耦,确保模型的纯净。

3. 使用组合代替继承

当需要扩展模型功能时,优先使用组合,而不是直接在模型中添加字段。例如:

用一个单独的“会员信息”模块,来扩展用户的会员功能,而不是直接在用户模型中添加“会员等级”。

4. 借助接口与领域驱动设计

通过定义接口或领域对象,避免模型设计受限于具体实现。例如:

class User:

def __init__(self, user_id, username):

self.user_id = user_id

self.username = username

class MembershipDetails:

def __init__(self, level, expiry_date):

self.level = level

self.expiry_date = expiry_date

这样可以灵活地扩展用户模型的功能,而不会破坏其核心结构。

04 典型误区与应对策略

尽管“模型抽象化”的理念很好,但在实践中我们可能会遇到以下问题:

1. 过度抽象

如果抽象过度,模型可能变得过于笼统,反而无法满足实际需求。例如,将所有业务都抽象为“实体”或“资源”,最后反而失去了模型的意义。

应对策略: 抽象时,关注对象的本质属性,适度平衡抽象与现实需求。

2. 忽略业务的特殊性

有时,开发者为了保持模型的抽象性,完全忽略了业务需求的复杂性,导致实现过程反而更加繁琐。

应对策略: 结合领域驱动设计(DDD),通过分层架构,让模型抽象与业务逻辑合理分工。

05 抽象模型是稳定的,业务逻辑是可变的

正如那位同事说的,模型设计应该专注于抽象概念,而不是被业务属性束缚。这是一个技术原则,也是一种长远的系统设计哲学。抽象模型就像稳定的地基,支持着不断变化的业务需求。

在未来的开发中,不妨多花一些时间,思考你的模型是否过于依赖业务属性?是否可以更抽象、更独立?相信这些思考会让你的系统更稳健,更灵活。

模型是稳定的,业务是灵活的。把握这两者的界限,是一个开发者真正成熟的标志。

本文由 @好帅的舅舅 原创发布于人人都是产品经理,未经授权,禁止转载

题图来自Unsplash,基于CC0协议

该文观点仅代表作者本人,人人都是产品经理平台仅提供信息存储空间服务。

更多精彩内容,请关注人人都是产品经理微信公众号或下载App
评论
评论请登录
  1. 所以一个好的技术是多么的重要,产品梳理清业务逻辑,技术根据业务逻辑设计出清晰的数据库结构;

    来自北京 回复
  2. 抽象化的模型减少了系统各部分之间的依赖,使得系统更加灵活,能够适应业务的变化。

    来自广东 回复