您是否被要求进行高级模型(模块)设计或低级模型设计?解决高级模型设计的大问题或领域是一个好主意,因为对于低级模型设计通常需要较小的问题或领域。
通常需求/问题来自提问者(用户/面试官),因此我们不再需要定义业务需求。但是我们仍然需要设计系统。
高级模型
我对“Apple Genius Recommendation System”不太熟悉,所以我将使用不同的问题类比,这是常见的Point Of Sales
问题。对于高级模型,您将定义整个系统。通常大约:
这就是所有高级模型/模块。如果有人问我如何实现该模型,我将执行以下步骤:
- 定义用户和系统之间的标准用例
- 将用例倒入一些协作图中,例如丰富的图片(或任何熟悉的东西)
定义异常用例。如果可以轻松定义异常,请立即将其用于建模。如果没有,请将模型标记为案例例外,以便与业务团队进一步讨论
一些用例例外可能是更改已提交订单、在首付后更改已提交订单、取消已付款订单、商品缺货等。
迭代过程。通常第 3 步可以变成第 1 步(例外情况可以/将是另一个用例)
例如,更改的已提交订单可以是一个用例,因为发生的更改很高。
当第 3 次完成而没有额外的用例异常(所有用例都已处理)时,通常我会添加value-additional operations
.
这些操作可以是通知(电子邮件/屏幕上)、历史数据维护、提醒、错误处理等。一些操作也可以是另一个用例,所以也许你需要迭代到第一。
例如,当您在预付定金结算过程中遇到错误时,您可能需要另一个用例来手动输入预付定金数据。或者,您可能需要在另一个系统中维护提醒系统。
移动到低级模型
对于其他信息,我通常将状态图用于用例/功能,例如订单状态。
低级模型
低层次模型将从高层次解决更小的问题。很容易说,您从高层(可能是订购)获取一个用例,然后从它开始设计低层。我通常不会先定义类图,而是使用某种形式的序列图来解决。以下是一些原因:
- 序列为您提供有关获取输入、获取数据和给出响应的并发视图
- 它很好地描述了与其他系统(如数据库和 Web 服务)的关系
- 它可以为您提供有关入口点或界面的图片,这些图片对于您的应用程序的基本架构非常有用
- 您可以从中创建类图,并在序列设计而不是类图期间轻松找到陷阱
然后我会继续系统状态图(可编辑、可查看等)。
最后,我会继续database design
和class diagram
。
为什么类图在最后一步?
类图(和数据库设计)非常依赖于你的整个过程。并发如何发生、通知、外部系统交互等都会影响接口和类图的设计。它也是与您的代码库最近的设计。
希望这能有所帮助,这完全是我的经验和意见。