Architecture 构建大型Liferay portlet项目

Architecture 构建大型Liferay portlet项目,architecture,project,structure,portlet,liferay-6,Architecture,Project,Structure,Portlet,Liferay 6,我们正在使用Liferay开始一些大型portlet开发工作,我发现很难根据我们正在创建的各种portlet来构建这个项目。我们不确定我们应该以哪种方式组织我们的项目。我们的开发团队分布在世界各地,我们使用git作为我们的版本存储库。我们使用SpringPortletMVC来开发Portlet,并使用ServiceBuilder来构建服务层 我可以考虑这三种方法 为每个Portlet创建一个新的Portlet项目 将每个portlet保存在一个单独的portlet项目中在开发过程中既简单又快速

我们正在使用Liferay开始一些大型portlet开发工作,我发现很难根据我们正在创建的各种portlet来构建这个项目。我们不确定我们应该以哪种方式组织我们的项目。我们的开发团队分布在世界各地,我们使用git作为我们的版本存储库。我们使用SpringPortletMVC来开发Portlet,并使用ServiceBuilder来构建服务层

我可以考虑这三种方法

  • 为每个Portlet创建一个新的Portlet项目

    • 将每个portlet保存在一个单独的portlet项目中在开发过程中既简单又快速,因为我可以让开发人员独立处理它们
    • 在portlet使用公共代码的情况下,这可能会成为一种痛苦。因此,在不同的portlet中,相同类型的代码可能会大量增加
    • 这可能会失去控制,因为我们将有许多war文件,每个文件都会增加我们的运行时成本
  • 在逻辑上将portlet分隔为若干个portlet项目

    • 这将减少portlet项目的数量,并且可以重用大量代码
    • 可以在这样的结构中放置一些控件
  • 只创建一个包含所有portlet的portlet项目

    • 对于分布式开发团队来说,这将是最复杂的管理
    • 大多数常用代码都可以重用
    • 在这种情况下,加强一致性会更容易
  • 1和2的组合(基于我在下面评论中与德克的讨论) 我想这种方法需要是1和2的混合

    • 我希望为每个开发人员提供一个独立的portlet dev env以及一些关于公共组件的指导原则
    • 这样,他们就可以更好地控制portlet代码,只关注特定于portlet的代码
    • 同时,公共代码可能需要更多的控制,因为多人可能会修改它
  • 如果您已经创建了liferay项目/Portlet,我想知道您的专家意见,以及您选择的方法。记住这些事情

    • 当各种开发人员正在开发多个portlet时,如何控制portlet的开发
    • 上述任何一种方法的优缺点是什么
    • 如果以上提到的方法都不好,请提及你能想到的最好的方法

    感谢您的阅读

    我认为这在很大程度上取决于您实际构建的项目类型。您所谈论的portlet是否是封装功能意义上的portlet,并且将作为封装功能使用(即,最终作为Liferay中的portlet)?在我看来,如果它们的功能是不相交的,并且彼此不依赖,那么它们应该放在不同的项目中

    如果您有一个核心功能(例如,持久层和相关逻辑或其他业务逻辑),那么您肯定应该尽可能多地重用它。因此,我认为(1)不是一个好的解决方案,例如,这个通用逻辑应该分组在一个单独的项目中,portlet本身也依赖于此


    作为一种通用方法:让开发人员都可以访问所有(或大多数)项目会有什么问题?公共代码可以被所有Portlet重用,而且每个人都只需处理他/她的部分

    除了Dirk的答案之外,我的经验法则是在同一个项目中使用具有类似维护周期的Portlet—例如,如果更新其中一个Portlet,通常会更新所有Portlet,因为它们生成一个应用程序,通过不同的UI呈现相同的数据。这基本上是你的选择2

    除此之外,你很好地确定了选项——答案是“在中间”。平衡分离和应用服务器开销。使用上面的经验法则,你就可以了


    关于开发环境:每个开发人员都应该在自己的环境中工作,但是,通过版本控制,他们当然可以在相同的项目上工作。

    感谢您的投入。我对每个portlet项目的想法是,它创建自己的war文件,每个项目都可能需要我们在其中包含所有spring依赖项。这可能是一个运行时成本。该项目有许多相互关联且相互依赖的Portlet。此外,他们将使用我们计划保持通用的同一服务层(正如您已经提到的)。高声思考,可能会在appserver级别保留所有spring和其他依赖项,这可能会降低运行时成本。如果依赖项是唯一的问题:因为Liferay本身有10亿个库(包括spring iirc),您可以使用liferay-plugin-package.properties(参见示例)引用它们。谢谢,这更有意义。