想象一下,您正在设计一个可能会扩展到亚马逊或Google规模的Web应用程序。在开始时,您只从项目的一个小方面开始,知道以敏捷开发的名义,您必须从某个地方开始。例如,您可以选择创建一个简单的书籍目录,希望您的项目起飞,有一天您不仅仅是一个目录,而是一站式网站,用于购买和销售书籍以及各种其他商品。 (这完全是假设的。)
您将采用哪些不同类型的建模?您在开始时会建模的不同“实体”是什么?您认为建模有多重要,您应该使用哪些信息来确定建模的时间和内容?
在关于SO的先前提出的问题的答案中,提到了“以数据为中心的世界观”与“以过程为中心的世界观”。在开始执行逻辑数据建模和物理数据建模之前,您是否在应用程序或网站上建模信息流?或者这些短语是指不同的东西?
您可以使用哪些工具来建模不同类型的信息?
答案 0 :(得分:3)
我的建模通常在一张纸或有时是白板上完成。我从编写详尽的技术设计中走了很长一段路,但我发现根本没有用来思考你想要在几年甚至几个月内拥有的功能。您的要求会不断变化,因此您应该为“现在”进行编程。
也就是说,在建模方面。
当然,您应该考虑如果您的公司发展会发生什么,但不会考虑功能,只会考虑性能。如果您有10倍的访问者,10倍的产品,10倍的订单,您的应用程序是否仍会运行...您需要担心的事情,而不是您打算在2年内构建的内容。你无法预见一切,并且所有编写“智能”和“可扩展”代码的尝试都将导致一个更复杂的系统,这个系统在两年内更难定制,如果你没有想到的话它一点都没有。
只需构建您现在需要的东西,并将其构建为精益和清洁,以便将来可以扩展,重构或替换。
答案 1 :(得分:2)
模型的未来验证与未来的实施验证不同。
以下是我使用的一些模型。
Data models:
Analysis model (conceptual): Entity-Relationship modeling
Design model (logical): Relational Data Model
Implementation model (physical): DBMS specific model
Application models:
Object Model: governs messaging among component objects.
Dynamic Model: governs states, events, and transitions within an object.
Functional Model: governs transformations and computations.
模特对于他们遗漏的东西以及他们留下的东西都很重要。不要试图预测一切,但也不要把自己画成一个角落。从别人的经验中学习,然后从自己的经验中学习。
答案 2 :(得分:1)
根据我的经验,从适当的,高度标准化的Db设计开始,是实现可扩展性的关键。您可以创建实体的原子越多,当未知的“未来需求”突然出现时,您的系统就越容易扩展。对于你知道你将要添加的东西提前计划之间存在差异,但由于时间限制或者可能(可能可能)已知持续时间的硬件限制而暂时不能。但这与计划“如果我们成为谷歌II”会有所不同。
在后端,一个强大的,高度规范化的表结构。在正面,干净,松散耦合的类和n层设计在可扩展性方面有很长的路要走。