问题 在命名空间下组织Apex类


Salesforce中是否有任何方法可以在包或命名空间下对顶点类进行分组?我们可以将托管包用于内部组织目的吗?


3091
2017-12-04 18:18


起源

关于Salesforce开发的主要建议是不要。看到 stackoverflow.com/questions/1664503/... - NickJ


答案:


这是force.com堆栈中的限制,如果不是不切实际的话,这会使中大型项目变得痛苦。使用托管包来获取包前缀并不能真正解决任何问题,所以这并不值得。

我通常会尝试将项目组织到一个级别的命名空间中。代替实际的命名空间,我将为每个将要命名空间的名称赋予3-5个字符的名称,以用作前缀。属于“命名空间”的任何类都有前缀。例如,如果我需要一个 payroll 命名空间,我会用 PYRL 字首。一个叫做的课 PaycheckCalculator 变 PYRL_PaycheckCalculator

这种类型的约定的实际优点是它有助于防止名称冲突和类在排序列表中查看时按“命名空间”分组,例如在IDE中,或者设置>开发> Apex类

不幸的是,几个基本的OO原则仍然从根本上被打破。可能最重要的一个是每个类形成一个隐含的依赖 一切 它具有可视性的其他类,即 所有 他们

我很想知道其他人是如何解决这个限制的。


9
2017-12-04 19:12



同样的工作...前缀约定,我讨厌它。根据今年在Dreamforce举行的“Meet the Developers”会议,我们很快就会看到有一个功能版本来满足这一需求。 - sorenkrabbe
这事有进一步更新吗? - Rhyous
去年夏天,我直接与工程组织中一位高级人士谈过这个问题。没有计划添加任何类型的包/命名空间功能。原因是很少有客户要求它。 - Jeremy Ross
很好的答案,希望这是在salesforce.stackexchange.com上 - SSH This


好吧,你 能够 使用托管软件包,但正如Jeremy提到的那样,它并没有给你带来太多帮助。当然,托管软件包对于开发在AppExchange上销售的公开列出的应用程序至关重要。但在内部它确实是一个组织范围的问题,因为一旦你创建了一个带有前缀的托管包,触及其他任何部分的所有内容都会被标记相同的名称空间前缀,包括所有自定义对象。更糟糕的是,您无法访问托管包中的代码  托管包(实际上是它们的第一点)。

虽然它不是最漂亮的解决方案,但我个人所做的是维护具有不同用途,应用程序和实用程序类的众多命名组织。当我在一个组织中需要一个实用程序类时,假设我正在构建一个发往AppExchange的新应用程序,我将从有问题的实用程序org执行Eclipse导出/导入。这看起来很奇怪,但拥有一个orgs库是我设法跟踪所有事情并管理“内部”组织的最佳方式。但最终结果实际上只是在任意代码存储之间进行了一次美化的复制粘贴操作。


2
2017-12-04 20:57



“您无法从托管包外部访问托管包中的代码”。顶点页面的版本设置选项卡上的已安装托管包的引用是否会绕过这个?还是我误解了? - Daniel Ballinger
@DanielBallinger我相信您必须在托管包中将代码设置为“全局”,以便在包外显示和引用 - JimRae


我在处理大型项目时遇到了类似的挑战,回过头来写一篇博文,分享我现在关注的方法: http://www.tgerm.com/2011/11/apex-class-naming-convention-suggestion.html


1
2017-12-08 07:47



我们希望获得有关SO的信息,而不是可以被破坏的外部链接。 - ipavlic