Architecture 如何理解现有项目

Architecture 如何理解现有项目,architecture,dns,Architecture,Dns,我是一名实习开发人员,至今已经编写了大约一年的.NET应用程序。我所做的大部分工作都涉及从头开始构建新的应用程序(主要是web应用程序),我或多或少地被赋予了对软件设计的完全控制权 然而,这是一次很好的经验,作为一名实习开发人员,我对所采取的方法是否是最好的信心微乎其微。理想情况下,我会喜欢与更有经验的开发人员合作(我发现这是我学到的最好的东西),但是在我为开发人员工作的公司里,我倾向于孤立地工作(我感到非常羞愧) 最近,我决定探索一些开源项目是了解有经验的开发人员如何进行设计的好方法。我发现自

我是一名实习开发人员,至今已经编写了大约一年的.NET应用程序。我所做的大部分工作都涉及从头开始构建新的应用程序(主要是web应用程序),我或多或少地被赋予了对软件设计的完全控制权

然而,这是一次很好的经验,作为一名实习开发人员,我对所采取的方法是否是最好的信心微乎其微。理想情况下,我会喜欢与更有经验的开发人员合作(我发现这是我学到的最好的东西),但是在我为开发人员工作的公司里,我倾向于孤立地工作(我感到非常羞愧)

最近,我决定探索一些开源项目是了解有经验的开发人员如何进行设计的好方法。我发现自己有点被我看到的项目弄得不知所措。以我的经验水平,很难理解我所面对的代码体

我的问题有点模糊。开发人员如何理解一个新的中大型项目。我发现自己倾注了大量的代码,努力做到有求必应。在任何时候,我都觉得我可以理解系统的一小部分,但看不到它是如何整合在一起的。其他人也有这种感觉吗?如果是这样,你会采取什么方法来理解这个项目?关于如何学习设计最佳实践,您还有其他建议吗


任何建议都将不胜感激。谢谢。

交流


我通常会要求开发人员给我一个项目或我感兴趣的任何项目模块的概述。到目前为止,我还没有找到比与相关开发人员交流更好的方法来引入现有的代码库。它们不仅可以为您提供项目和代码的概述,还可以推荐任何值得一看的可用文档(如类图)。

您应该始终寻找更好的方法。它的核心是你激励自己变得更好。总是问“必须有更好的方法”是一件好事——但不要让它让你瘫痪。设定一个时间去尝试一些东西,如果你一事无成,放弃它,走另一条路

改变的是你信任的人,你可以从中获得灵感的人和你可以信赖的社区。我一直在做这件事,有一小部分人以前和我一起工作过,在我知道我不擅长的领域比我强,而且不介意告诉我“不,糟糕,你应该做(其他一些想法)”。您已在此处发布内容的步骤:-)

关于项目——每次我处理一个已经存在的项目,不是我的,编写它的人不在身边,代码陈旧,文档稀少等等,我倾向于只关注一件事和一件事。不要试图了解整个系统,这是不现实的,也不要太担心您的更改是否是完美的修复/解决方案/任何东西——随着时间的推移,随着您的改进和理解程度的提高,这些问题会变得显而易见。知道你不知道的事情,不要对它有偏见,一次只学一个频道。当你不得不回到2003年的数据集时,即使知道了很多技巧和很酷的东西也没有多大意义


你提到的人都很孤僻。。。这太糟糕了,因为开发任何东西都需要很多人互相交谈。我建议您询问一下,您是否可以将程序与其中一位非常了解该系统的人配对。如果那个人找借口或说“他们找不到”会找的人。

这是一个非常有趣的问题。我也想知道其他开发者是如何做到这一点的。到目前为止,我没有按特定顺序使用这些可能性:

  • 阅读源代码,它的优点是它总是最新的。它也是 最困难的任务,但它是可能的
  • 阅读单元测试如果它们可用,它们通常会显示类、库或框架的预期用途
  • 重构部分源代码。当您提高源代码的质量时,您增加了对代码的理解,或者我应该说,只有在您确切了解源代码的功能时,您才能改进源代码
  • 调试应用程序,在使用调试器的同时逐步完成程序
  • 使用诸如NDependes、JDependes、Lattix、Visual Studio等工具对应用程序的体系结构或设计进行反向工程,并以此作为起点
  • 阅读文档。任何使您能够理解应用程序的文档都可以(用户文档、设计文档或体系结构文档)
  • 正如布鲁诺所说的,和最初的开发者沟通也是一个不错的选择

    • 当我开始我的旅程时,我问了自己一个问题。首先,它需要大量的耐心和时间,这取决于项目的规模。 下面是我今天所做的工作,以了解一个现有的项目,我所从事的项目大多是以数据库为中心的,这个列表不一定适用于开源项目,也适用于工作场所项目

    • 创建数据库的ER图(如果是关系数据库)
    • 创建一个ER关系表,其中列出了表的所有关系 (这里是一个sql查询)
    • 使用上面的工作表创建视图,以便对表进行逻辑分组并查看结果。这有助于理解应用程序背后的模式和数据
    • 用于布置项目中的层和组件的图表
    • 了解流程的序列图和数据流图
    • 对于以上内容,您需要使用VisualStudio之类的工具调试应用程序
    • 类图和方法的引用映射,以理解代码中的链(可以使用诸如Resharper之类的工具)
    • 功能规范(或编写您自己的项目故事)和用例图(