(不过我认为这并不重要,但以防万一:我打算使用Java和Hibernate)
取决于你的应用是为了满足用户需求还是开发人员需求。
从用户故事入手,确保面向对象编程(OOP)类的正确性。这样,你的用户会爱上你的应用。
否则你最终会得到一个将用户变成数据输入职员的应用。(你会有很多同行。)
从数据库开始的好处是能够考虑性能和DBA。
从面向对象编程开始的好处是能够获得更纯粹的OO设计,但你的ORM可能会表现不佳。
我发现黑盒子ORM太过限制,所以我的系统都是手写或通过代码生成和修改,这样我的数据库通常非常紧凑,而我的OO模型是纯粹的。我坚信聪明的人类是解决阻抗匹配问题的解决方案。
从数据库层面开始,绝对会让你创建一个更容易被常规关系型数据库处理的数据库。因此,如果你期望获得成千上万甚至数百万个对象,这就是我会采取的方法。然而,如果你不期望获取那么多数据,或者性能无关紧要,我会选择对象方法,因为它将允许你建模一个更符合实际应用程序的解决方案。
这取决于您想要最佳性能的地方。如果您预计数据库成为瓶颈,则应从那里开始设计,以便您可以调整其性能。如果您仅使用数据库保存需要在应用程序中具有高性能的几个对象的状态,则相应地进行设计。与好的编译器相比,O / R映射软件在性能调优方面还不够可靠(尚未,而且它们不会很快追上)。您仍然需要更好地设计性能(尽管开发成本较高)。
这要看情况。你是在进行面向对象编程还是SQL编程?
两种方法都可以奏效,每种方法都有其优缺点。以数据库为中心的方法非常适合许多共享数据的应用程序。以对象为中心的方法非常适合快速启动单个应用程序。
如果数据库不存在,我会考虑在不担心它的情况下构建应用程序。也许像db4objs这样的东西可以为您提供所需的对象持久性,同时将应用程序发展成为有用的东西。稍后,当新的应用程序被设计用于共享数据或临时查询变得重要时,关系型数据库映射更有意义。也许您永远不需要关系型数据库。需要时再构建它。
如果数据库已经存在,或者将数据放入其中是必需的,我仍然会尽可能推迟关系工作,并使对象和代码正常工作。但是,如果我看到自己编写复杂的代码,可以通过SQL完成,我会改变主意。