练习你的微观建筑技巧

时间:2013-11-15 13:46:36

标签: java java-ee design-patterns architecture

我搜索了很多内容,找不到我要找的内容。

我正在寻找一些架构实践。 我的意思是有很多关于设计模式的书籍,但我想要分析EE应用程序架构中的常见错误。我发现的所有 - 反字符串连接或其他可以在FindBug或Sonar的帮助下找到的。

我如何理解:

  1. 预订以及后续步骤:任务定义,错误决定,为什么不好,正确决定。
  2. 教育资源。我听说测试人员有这样的资源。一些应用程序打开进行测试,每个想要学习测试的人都可以测试它;并且在一段时间之后与其他人讨论自己的结果或者看到他找到的错误的百分比。
  3. 也许是其他想法?
  4. 为什么我认为设计模式书籍不适合我:

    开发人员可能会从这些书籍中了解许多设计模式,但无法根据具体情况选择正确的设计模式。恕我直言,这是因为这些书籍没有给你任何练习,也没有教育读者在任何情况下应该采用哪种设计模式。那些书只是为你准备好解决方案。

    修改

    没有任何答案了。所以我想扩展我的问题:

    我相信,不,我确定存在专门用于提高架构技能的课程,展示Web应用程序设计中常见的错误等等。我也知道有很多会议与这个主题相关联。

    请告诉我,我应该在哪里找他们。

10 个答案:

答案 0 :(得分:5)

Holub on Patterns是一个关于设计模式的新鲜有趣的视角。

很多代码。很多赞成和缺点,非常实用和实用。每次重读时我都会学到新东西。

这是我的首选书籍,是“GoF和Head-First Design Patterns之后的下一步”。我喜欢它,并且已经很好地接受了那些试过它的人。

答案 1 :(得分:3)

我可以假设您知道如何使用依赖注入创建独立对象吗?如果没有,这将是一个很好的培养重用和创建一个更健壮的架构。使用DI将是重新构建现有解决方案的绝佳方式。 (与大量进化的代码相比,由于相互依赖性而变得脆弱。)

虽然你不是在寻找设计模式书籍,但我请你瞥一眼J. Kerievsky的Refactoring to Patterns

Kerievsky带您了解一些真实的重构,这些重构的标题包括“将创造知识转移到工厂”。 (这是“现实生活”,因为他使用的是实际代码,而不是一个人为的例子。)

最后,我最近使用Spring Integration作为企业集成模式受到了鼓励。如果您在Spring Integration中构建并实现一个适度的项目,那么您将获得DI和EIP的大量经验。

答案 2 :(得分:3)

在我看来,我认为通过设计模式的类图会对你有所帮助。

我建议的更多内容是简要介绍“ Head First Design Patterns ”一书。根据我的经验,本书有一些非常好的例子与每个模式有关,这些模式将帮助你进行模式选择。

根据设计模式的选择,您可以通过在不同场景中实现越来越多的模式来开发它。

答案 3 :(得分:3)

如果您正在编写企业应用程序,我建议您在完成基本设计模式后使用Patterns of of Enterprise Application Architecture

大约十年前写的是关于如何在廉价服务器上分割大量数据的一些更现代的东西,你在那里找不到。编写时云并不存在。但它认真讨论了很多你不会在其他地方讨论过的事情,并为应用程序的元素构建块提供硬币名称/模式。我称之为经典而非旧。

有关所讨论模式的索引,请参阅http://www.martinfowler.com/eaaCatalog/

答案 4 :(得分:3)

根据我的经验,架构师的角色对于不同的公司来说有不同的定义,并且通常与代码结构和模式关系不大,而且与您的业务需求和实践有关。雇主似乎更关心您可能在您的解决方案中集成哪些系统,或者您希望在公司强加的条件下与各种客户进行互动。

正确地使用DI框架或设计模式是程序员应该能够在没有建筑师的特定指导的情况下进行的,但研究和选择最适合您的任务的DI框架是建筑师可能做的事情。

他们也倾向于做更高级的命令 - 我工作过的更好的架构师之一实现了我们系统中更难的部分,他编写了一个自定义的Java类加载器,它从数据库加载类并设计了它与GUI的交互方式他设计的构建器,以便我们的客户可以使用拖放功能编辑GUI,我们会将.class文件保存到数据库中,以便连接到该服务器的所有客户端计算机可以立即加载它。

有些公司的定义与其他公司不同 - 我与之合作的公司设置了机顶盒有线电视盒软件,有些建筑师很难编程或与软件设计有任何关系,他们负责分解通信协议和与客户互动以帮助了解他们的问题(我将其视为分析师的工作而非建筑师,但它比我遇到的大多数分析师工作更具技术性)

我想我说的很多,取决于你正在与之合作的公司。我建议你去找你的经理(或现有的建筑师)并告诉他你对这条路有兴趣,并询问你应该如何进步。

当被问到这个问题时,我曾与之合作的一位建筑师表示,这是你一直在努力的事情 - 你没有学习和完成,一直保持最新状态。你可以做你的新工作 - 别人可能会读书或玩视频游戏,你应该阅读有关软件设计,安装和使用新软件语言/工具/库以及了解更多业务细节的文章。

答案 5 :(得分:2)

看看Adam Bien的书

Real world java EE 6 Patterns

您可以在java.net下载基于本书的介绍

Real world java EE Patterns (pdf)

答案 6 :(得分:2)

第一步是学习开发应用程序的一般良好实践。了解设计模式是非常有用的,因为它是一种语言,所以如果你称之为" Controller"或者"请求/响应"它会自动告诉其他开发人员您正在应用的模式以及如何使用它/使用它。此外,大型软件通常使用它们构建,因此您必须了解设计模式。并不意味着你需要将每一个应用程序压缩到每个应用程序中,这样可以省去解决其他人已经解决的问题的麻烦。就代码级别的最佳实践而言,Sonar是一个很好的代码分析工具,它教会了我很多不做的事情。

其次,您需要缩小上下文范围并确定您计划构建的应用程序类型。例如,Web应用程序与嵌入式应用程序具有不同的体系结构,如果您专注于一个您不必知道另一个的所有细节。

第三,阅读Enterprise Integration Patterns

第四,与Apache Camel一起开展工作。它是一个Java企业集成框架,很棒的文档,非常容易启动和运行。

答案 7 :(得分:2)

对我来说,设计模式看起来像孤立问题的解决方案。在实际操作中,我们必须处理高度依赖的问题组合。我从未见过纯粹使用的任何模式。我可以推荐一本书,它可以提供更广泛的软件架构视图:Domain-Driven Design: Tackling Complexity in the Heart of Software。它说明了如何进行软件设计,而不是提供一套通用工具。通过一些例子,它解释了如何组合解决一系列问题。

还有一本书解释了如何设计课程及其合作:Interface Oriented Design: With Patterns。编写易于理解和可维护的代码。它解释了较低级别的方法,而不是DDD。

答案 8 :(得分:2)

我的两分钱:)。

  1. 我同意你的看法,即简单地学习设计模式并不重要。通常在学习设计模式之后发生的典型事情是开发人员尝试map the a ready made solution (pattern) to a problem这不是正确的方法,并且会产生比它解决的问题更多的问题。
  2. 恕我直言,作为一名建筑师更多的是经验而非学者。架构师的核心是问题解决者解决方案提供商。问题,我的意思是大规模的设计问题,而不是今天的编程问题。
  3. 问题可能在于是否使用OR mapping tool或更大而更深刻的问题,例如是否适用于SOA等。它不是要做什么,而是如何做。
  4. 这些都是经验问题。问题可以通过千种不同方式解决,但在设计系统时,应充分考虑技术可行性,性能,可扩展性,部署,维护,可扩展性以及许多此类非功能性需求。现在,除非你已经完成了这项任务,否则很难掌握这些对今天的软件系统至关重要的事情。
  5. 没有人可以否认书籍的重要性(道歉,因为这里的人们已经提出了精彩的书籍而没有介绍新书)。它们是由非常聪明,敏锐和最重要的经验丰富的人写的。我认为这是分享一次经验和观点的一种方式,它们可以帮助你粉碎你的道路。
  6. 除了书籍之外,了解或了解系统设计的另一个非常重要的方法是剖析现有系统的能力。例如,您可能想要探索像Tomcat这样的典型Web服务器是如何工作的,或者像Spring这样的DI框架是如何工作的。开源使这些事情成为可能。

答案 9 :(得分:2)

成为优秀软件架构师,开发人员或程序员的最佳单一方式就是工作。

了解基础知识,然后处理某些事情 - 特别是你感兴趣的事情。努力工作将以经验的形式带来好处。

围绕着比你更聪明的人,并听取他们所说的话。相信他们的经历可以帮助您更好地理解。

智慧不是可以用50美元的书,甚至10万美元的大学学位购买的东西。软件工艺是你必须获得的东西。

如果您有空闲时间,那么开展一个受欢迎且成功的开源项目将有助于您获得良好的体验。

相关问题