Architecture 当你开始考虑一个编程项目时,你首先做什么?

Architecture 当你开始考虑一个编程项目时,你首先做什么?,architecture,Architecture,当你开始考虑一个编程项目时,你首先做什么?你会拿出一张纸开始画建筑草图吗?你有记点子的笔记本吗?你开始编码了吗?或者你用一个奇特的软件包为软件建模。来吧,来吧,阐明你的想法…为了开始思考架构或设计,我倾向于编写假设的代码片段,我想“只工作”以解决应用程序的核心问题 例如,在设计数据库时,我通常会考虑一些我希望编写的示例查询,而不是抽象地考虑数据实体和关系 这种方法有助于我(个人)避免在第一次使用抽象时走得太远。您可以称之为“美丽的代码优先”方法。它与TDD有相似之处,不同的是您的目标是首先获得表

当你开始考虑一个编程项目时,你首先做什么?你会拿出一张纸开始画建筑草图吗?你有记点子的笔记本吗?你开始编码了吗?或者你用一个奇特的软件包为软件建模。来吧,来吧,阐明你的想法…

为了开始思考架构或设计,我倾向于编写假设的代码片段,我想“只工作”以解决应用程序的核心问题

例如,在设计数据库时,我通常会考虑一些我希望编写的示例查询,而不是抽象地考虑数据实体和关系

这种方法有助于我(个人)避免在第一次使用抽象时走得太远。您可以称之为“美丽的代码优先”方法。它与TDD有相似之处,不同的是您的目标是首先获得表达性、简洁的代码,然后构建架构和抽象来支持它


我个人认为,从长远来看,表现力强、清晰的代码比笨重、经过彻底测试的代码更可取。当然,这些并不是相互排斥的。不要让对漂亮的“架构”的渴望导致业务逻辑中的客户端代码笨拙。

我几乎总是从绘制一个粗略的对象模型开始,让我直观地了解系统的结构。然后从那里开始构建。

我坐下来开始编码……然后我删除所有项目文件,进入白板,开始映射对象和关系。

我写下一个功能列表,然后带着一些细节进入其中,然后开始涂鸦我的对象以及它们如何相互作用,有点像个半死不活的DFD。。我所有的画都乱七八糟

我将谷歌首先看到一些东西以同样的方式存在/或者更近的距离存在,并了解更多。借助当今可用的语言和框架的强大功能,任何普通程序员都可以编写代码,但质量将真正取决于您使用了多少“最佳实践”来实现该解决方案。你能以多快的速度达到目标也很重要


因此,我认为谷歌搜索将是SDLC过程中的一个重要周期:)

我拿着一个便笺簿和一支笔,开始画笔记和流程图,没有什么特别的,只是将概念模型可视化,从中我尝试将每个部分分解成越来越简单的任务


一旦我不能进一步简化任务,我就开始编写lose伪代码并粗略编制数据库方案。只有到那时,我才开始编写样本/测试代码。

我有一个笔记本,上面写着我所有的想法。我通常会写一两页关于项目/产品/等等的密集笔记,然后别管它,因为我没有时间做任何事情。当实际设计的时候,我会重新阅读我的笔记并尝试用UML创建类图。通常这会失败,这会导致更多页的笔记,完善想法,解决奇怪的边缘情况和未定义的东西,等等。冲洗并重复。一旦我有了一个记录所有主要参与者的类图,我就开始编码。

我想到了用户以及他们想要什么和将得到什么


他们不关心后端或花哨的语言,在你明确知道你的程序将做什么以及为什么有人想使用它之前,其他一切都不重要。

通过编程项目,我将假设“为客户”而不是一个爱好/个人项目

我首先让客户用高级语言向我描述他们想要什么。我寻找类似“我想要一个有多个部门并允许通过电子邮件回复/更新的票务系统”之类的东西。快速简单的东西

从这里开始,我开始编写规范文档的第一稿。我开始向客户提问,以帮助完善原始草案,并降低到更精细的级别,直到最终系统完全规格化。我所说的完全,是指客户无法向我提供更多关于他们想要什么的信息


对于个人或爱好类型的项目,我通常会花几天的时间在脑海中反复思考,在纸上或建模程序中设计一些基本的数据库模式。我喜欢睡上几个晚上,看看它是否是我将继续发展的兴趣,而不是在它完成之前放弃的东西。一旦我确定了这一点,我将继续起草我自己的规范,并从那里开始。

尝试分析商业领域。i、 例如,应用程序试图解决的业务问题的结构。它需要操纵/管理哪些实体,它们是可变的/不可变的吗?应用程序需要实现哪些流程(从业务角度来看)?每个流程需要哪些实体?对于每个实体,流程对该实体做了什么?等等

  • 收集需求
  • 确定优先次序
  • 估计工作量
  • 开始工作
  • 跟踪和评估进展

  • 我将开始记录一个愿景,一个描述项目、围绕项目的业务以及成功标准的简短文档


    这有助于确定功能的优先级,并为项目中的每个人提供相同的方向

    我总是向其他人(最好是其他开发人员)解释我想用项目解决的问题。除非我能清楚地解释我想做什么,否则我就没有希望创造出能解决问题的东西。不得不向另一个人描述这个问题的行为常常会让我在问题领域的知识上出现缺口,并暴露出我的未经证实的假设。 如果我手边有一个,这通常包括我画出我是如何看待问题的