软件设计/架构问题

时间:2010-11-04 08:45:23

标签: architecture

我现在编写了一段时间并学习了几种编程语言。我编写了很多小工具等。我想我掌握了编码本身很好的行为,所以我有例如没有语法问题,我非常了解幕后发生的事情(合理的汇编程序知识)等等。

我的大问题是:我无法设计更大/更复杂的应用程序。我学习了OOP的原理,设计模式,学习了一些基本的lisp编程以及我能找到的所有东西,并认为它可以帮助我处理我的问题。

但无论我尝试什么,我都会尝试多久:我无法做到正确。我的设计总是在某种程度上对我不合适。因为我从来没有通过一个更大的项目,我对我的程序结构永远不满意。

你有类似的问题吗?你是如何设法解决它的?你有什么关于如何继续的提示吗?

6 个答案:

答案 0 :(得分:13)

我认为经验是这里的关键因素。每一个设计都会在某些时候失败,然后由你来改进并从你的错误中吸取教训。

在我看来,通过阅读一些书籍,你可以学到很好的软件设计。

答案 1 :(得分:11)

设计本身就是一种迭代活动。您首先从某个设计开始,然后分阶段使其更好。

设计不是为了实现完美,而在更大的应用中甚至无法实现。 设计就是要做出良好的平衡和权衡,最终提供符合要求的良好,强大和可维护的应用程序。

你永远不会在所有方面100%正确

阅读一些关于设计/建筑的好书不会让你直接成为这个问题的摇滚明星,但它肯定会为你提供工具,你可以用它来改进和完善你的技能。 / p>

以下是一些书籍的例子:

当然,实践经验也很重要。

答案 2 :(得分:4)

 design bigger/more complex applications

当您说设计更大/更复杂的应用程序时,我假设您的想法是通常所说的“企业级应用程序”。 您可以查看this question,其中讨论了各种有助于尝试和客观化使应用程序成为企业级应用程序的标准。

谈论这些问题,

  1. 小型应用程序可能不一定有很多适用于它们的问题。

  2. 即使有企业应用程序,需要解决如此大量的问题,设计的不同之处在于哪些问题更为重要。此外,如果担心相互矛盾,则选择哪一个。

  3. 在为您的应用程序进行设计时,如果您尝试将这些问题牢记在心并根据这些问题做出设计决策,那么这将是尝试朝着正确方向前进的一种方式。 HOWEVER ,说起来容易做起来难。虽然看似简单的列表,但设计正确是一个经验丰富的建筑师失去睡眠/头发/生命的东西,并且通常非常难以正确,特别是对于初学者。

    其中一些决定只是从经验中学到的。根据我的个人经验,在经验丰富的建筑师的监督下,有很大帮助。为了能够学习并获得他们的知识和经验的好处,教会你没有书/博客的东西。

    But no matter what i try, how long i try: i just can't get it right. 
    My designs always seem wrong to me somehow. 
    
    坦率地说,你完全是错误的判断对象。你怎么知道你的设计是错的?说设计错误的唯一真正方法是,如果你的应用程序没有做它应该做的事情。

    如果你想对你的设计进行一些验证,那么我建议你问一个曾经从事类似规模项目的人,并且让他们看看你的设计并进行审查 - 从他们的角度来看。那真的会给你一些关于你的设计在哪里的好主意。

    Cause of that i never drawn through a bigger project, i'm kinda never satisfied 
    with the structure of my program.
    

    不幸的是,设计企业应用程序时的一些真正的复杂性来自于各种不可能模拟的东西。其中一些可能是组织约束,例如我的客户的CTO没有使用允许使用X技术),比如我们需要将我们的应用程序与我们的供应商正在使用的本土MS Access应用程序集成。应用程序及其设计的这些复杂性是您必须经历的事情,并且通常需要从中学到很多东西。

    要获得这样的经验,你必须在提供这种机会的地方工作。通常,我所看到的是,公司规模越大,其IT环境就越复杂,并且为复杂情况提供了最大的机会

答案 3 :(得分:3)

首先看看Uncle Bob Martins principle每个设计模式都涵盖了一些原则,注意开放封闭原则总是我们做不到这一点,但通过增加经验使得更容易做到此

我认为尝试解决然后重构是一种很好的方法,它有助于解决问题,使问题变得更敏感,并提供解决方案,使我们摆脱压力,解决问题。

答案 4 :(得分:2)

尝试一步一步地进行,不要试图一次性设计。

  1. 定义应用程序的要求。
  2. 想想你需要的对象,尽量让每个对象尽可能简单明了,不要制作具有许多不同功能的大对象。
  3. 想想你的对象之间的关系。
  4. 试验和错误会让你到那里。经过一些项目后,您将有足够的经验在第一时间做到正确(尽管许多项目没有“正确”的设计)。

    记住让你的设计尽可能简单,使用复杂的设计来解决一个简单的问题并不是一件好事。

答案 5 :(得分:1)

添加更多日历智慧:“不要重复自己”和“将依赖关系降至最低”。不过,这两个人经常竞争。