Force.com平台的缺点


89

目前,我们正在考虑将Force.com平台用作我们的开发平台,而销售人员和force.com网站则充满了使其成为全球最佳平台的原因。不过,我正在寻找的是使用这种平台的一些实际缺点。


这篇文章很老,但是Salesforce仍然很难发展。即使8年后,我仍然感到震惊,这需要花费很多时间和精力来克服许多缺点。
NickJ

Answers:


142

这里有10个入门指南。

  1. Apex是一种专有语言。除了force.com Eclipse插件外,几乎没有可用的工具,例如重构,代码分析等。
  2. Apex是基于Java 5建模的,它被认为落后于其他语言,并且没有工具(请参阅#1)可能非常麻烦。
  3. 部署仍然是相当手动的,有很多陷阱和手动步骤。随着时间的流逝,这种情况正在逐渐改善,但是如果您习惯于进行自动部署,将会感到失望。
  4. Apex缺少软件包/名称空间。您所有的类,接口等都位于服务器上的一个文件夹中。这样可以减少代码的组织性,并且类/接口的名称也必须很长,以避免名称冲突并提供上下文。这是我最大的投诉之一,仅出于这个原因,我不会随意选择在force.com上构建。
  5. “ force.com IDE”(又名force.com eclipse插件)非常慢。保存任何文件(无论是类文件,文本文件等)通常需要至少5秒钟,有时最多需要30秒钟,具体取决于组织中有多少个对象,数据类型,类文件等。保存也是一项阻止操作,不仅需要编译,还需要本地项目与服务器的完全同步。比Java或.NET慢几个数量级。
  6. 在线开发者社区似乎并不十分健康。我注意到很多论坛帖子都没有得到解答或未解决。我认为这可能与salesforce.com使用的论坛软件有关,这似乎很难。
  7. Apex中的数据访问DSL仍有很多不足之处。与(N)Hibernate,JPA等同类产品相比,它甚至没有遥不可及的竞争力。
  8. 在Apex / VisualForce上开发应用程序是调速器极限工程中的一项练习。轻松地花费程序员一半的时间来尝试优化,以避免众多的调控器限制和诸如Visualforce视图状态限制之类的其他难题。可以说,如果您从一开始就编写高效的代码,就不会遇到这个问题,这在一定程度上是正确的。但是,在很多情况下,您有充分的理由在一个会话中进行多于x个查询,或者循环遍历多于x个记录,等等。
  9. 保存->编译->运行周期非常慢,尤其是。当涉及压缩和上传整个静态资源包时,只是为了做一些诸如测试较小的CSS或javascript更改之类的操作。
  10. 总的来说,一个年轻的,刚刚起步的平台所带来的痛苦是没有开源的好处。您无法验证和/或修复平台中的错误。他们说将其发布到他们的IdeaExchange。是的,祝你好运。

免责声明/披露:托管平台(例如force.com)有很多好处。Force.com确实会定期增强该平台。我喜欢很多东西。我在force.com上赚钱


4
那是您到达那里的绝佳清单
lomaxx

1
如果他们进行托管网站托管,我会喜欢上force.com,而且我不仅可以通过其他API或其他API来获取我的数据,还可以通过夜间获取。我的Oracle数据集的备份。Salesforce的家伙提供这个吗?我从来没有从他们的销售人员那里得到过一个直接的答案,我一直认为这不是。
克里斯K

3
它们不会给您这种“原始”访问数据的权限。有一项备份服务可以定期为您提供组织的CSV压缩文件。还有一个复制API,可让您以伪实时方式保留自己的并行备份。
杰里米·罗斯

@Jeremy出于好奇……您在eclipse ide插件中花费了多少时间,而不仅仅是在Salesforce应用程序的“设置”菜单中进行设置?
lomaxx

1
我个人将90%的时间用于日食或文本编辑器(以TextMate为例)。但这是因为其他人通常会做很多基本数据配置。自定义对象和字段的配置是在salesforce.com中完成的,而不是在代码中完成的,因为在force.com世界中没有DDL。有一个元数据api,但我从未在数据设计期间使用它。
杰里米·罗斯

38

我看到您已经得到了一些答案,但是我想重申一下,浪费了很多时间来绕过平台上的各种调控器限制。尽管我在一定程度上喜欢该平台,但我强烈,强烈地建议不要将其作为通用应用程序开发平台。如果您需要的话,它非常适合作为超级可配置和可扩展的CRM应用程序。尽管他们的营销在推动Force.com成为通用开发平台方面出类拔萃,但距离营销还很遥远。

在尝试围绕人们所引用的限制进行编码时,很容易浪费具有稳定平台并避免出现较大的性能和稳定性问题的效率。该平台有很多限制,这完全令人发疯。这些限制不是高端的限制,一旦有很多用户,您将立即达到它们。

尽管通常有一些技术可以解决这些问题,但是在您还尝试开发实际应用程序的业务逻辑时,很难找出避免这些问题的策略。

为了让您简单地了解开发人员对环境的不友好程度,请参考上面提到的“缺少调试环境”。比那更糟。您最多只能在调试日志中看到对服务器的最新请求中的20个。因此,当您在应用程序内部进行开发时,必须创建一个“新建”调试请求,选择您的名称,点击“保存”,切换回您的应用程序,刷新页面,单击返回至调试选项卡,尝试查找包含调试日志的请求,点击“查找”以搜索您要查找的文本。就像单击十下一样查看调试输出。尽管这看起来微不足道,但这只是一个例子,说明了开发者的经验很少得到关注和考虑。

关于开发平台的所有内容都是经过深思熟虑的。它的意义非凡,但大部分都是PITA。如果您不确切知道自己在做什么(例如,您已经获得认证并且对Apex有深刻的了解),那么很容易就会花费您20倍以上的时间(在另一种环境中)如果您什至可以成功,那么看起来似乎很简单的事情。

州长的限制确实如此糟糕。您有各种限制的组合(数据库查询,返回的行,“脚本语句”,将来的调用,标注等),并且您必须确切地知道如何避免这些情况。例如,如果您在一个对象上有一个计算得出的汇总“公式”字段,而在一个子对象上有一个触发器,则它将执行父对象触发器,并根据您的限制进行计数。直到您经历了痛苦的尝试和失败的过程,这种事情才变得显而易见。

您将尝试一件事来避免一个限制,然后在永无止境的“挑战限制”游戏中击中另一件事。在此过程中,您将不得不彻底重新构建整个应用程序和方法的架构,并重写所有测试代码。您必须具有75%的测试代码覆盖率才能部署到生产中,这实际上是一件好事,但结合所有其他限制,这将非常麻烦。实际上,您会达到写出测试代码的州长限制,这在普通用户场景中是不会出现的,但这会阻止您实现覆盖范围。

更何况还有其他许多问题。包装不是您期望的。没有组织管理员的大量用户干预和配置,您就无法打包应用并将其交付给用户。AppExchange简直是在开玩笑,甚至他们甚至开始收费5K只是为了让您的应用程序上市。使用数据加载器进行导入很糟糕,尤其是在有触发器的情况下。您不能一步一步导出所有数据,其中包括您的关系,因此,一步就可以轻松地将其重新导入到另一个组织(例如,开发组织)。您每个月只能从生产中刷新一次沙箱,无一例外,并且默认情况下您不能将数据包括在刷新中,除非您已致电客户经理以解锁该功能。您可以' •批量删除自定义对象中的数据。您不能更改软件包名称。某些事情可能会花费很多在您提出要求之后需要几天才能完成,例如要部署应用程序之前进行数据备份,并且在此过程中没有进度报告,也不太了解确切的导出时间。如果数据之间存在关系,那么就存在数据的同步性问题,那么就存在严重的数据完整性问题,因为没有“事务”之类的东西可以在一个步骤中导出多个对象。可能有一些商业工具可以促进这些工作,但是对于那些预算不多的普通开发人员来说,这些工具是无法实现的。

其他人在这里所说的其他一切都是真实的。保存文件有时可能需要五秒钟到一分钟。

我并不是说这么消极,因为该平台在某些方面非常酷,而且他们正在尝试在多租户环境中做其他人都无法做的事情。这是一个非常创新的环境,并且在一定程度上具有强大的功能(我实际上非常喜欢VisualForce),但又需要一两年的时间。他们正在与VMware合作,这可能会导致为开发人员提供更多的游戏围栏而不是监狱牢房。


在获得此答案的两年后,如今的平台又如何呢?它是否有所改善,解决了一些麻烦的问题,或者至少消除了这些麻烦的问题?
Yaroslav

凹凸,即时消息我也想知道在这两年中情况是否发生了变化。
magallanes 2012年

5
我无法在AppExchange上发表评论,但是我在将“ salesforce.com糟透了”捣碎到Google中之后,发现了这个线程,这让触发器和调控器限制产生了挫败感,并跳过了圈来处理非常简单的数据……。
随心所欲

1
@Yaroslav我将看到您的两年,再增加三年并进行更改。它已经做了一些令牌改进,但总的来说,这个答案仍然是正确的。

25

在过去两周左右的时间里,在平台上进行了相当多的开发之后,我可以为您提供以下几点:

  1. 没有RESTful API。他们有一个可以调用的基于soap的API,但是无法进行真正的宁静调用

  2. 没有简单的方法来获取其SObjects并将其转换为JSON对象。

  3. 除非您要自定义页面,否则视觉力页面还不错,这是一个痛苦的世界。

  4. 视觉强制页面需要绑定到SObjects,否则无法获得标准输入字段(如datepicker或select list)正常工作。

  5. 如果您想自己工作,可以使用eclipse插件,但是如果您想与eclipse插件一起在大型团队中工作,则请忽略它。它不处理与服务器之间的同步,它崩溃了,并且根本没有帮助。

  6. 没有调试器!如果要调试,则可以通过system.debug语句进行调试。这可能是我发现的最大问题

  7. 他们的“ MVC”模型并不是真正的MVC。它与ASP.NET Webforms非常接近。您的视图不仅与模型紧密相关,而且与控制器紧密相关。

  8. 存储大量文档是不可行的。我们需要存储超过100gb的文档,并且引用了一些荒谬的数字。我们决定在Amazon S3基础架构上实现文档存储

  9. 即使语言是基于Java的,也不是Java。您不能导入任何外部软件包或库。另外,可用的基础库受到严格限制,因此我们发现自己在外部实现了一堆东西,然后将这些位公开为force.com调用的服务

  10. 您可以调用基于外部SOAP或REST的服务,但是消息正文的长度限制为100kb,因此它对您可以调用的内容有严格的限制。

坦率地说,虽然在诸如force.com平台之类的东西上进行开发可能会带来好处,但对我而言,您无法将force.com平台用于真正的企业级应用程序。充其量您可以编写一些基本的Crud风格的应用程序,但是一旦您陷入任何遥不可及的复杂情况,我都将像瘟疫一样避免使用它。


16
RESTful API现已生效
mirezus 2010年

3
JSON序列化和反序列化可用于Non SObject。
kadalamittai 2012年

您如何将Amazon文档存储与Salesforce集成(假设您做了)?
Michael Paulukonis 2012年

现在有一个调试器,但是确实要花额外的钱。16年冬季发行说明
马丁

14

哇-在平台上工作了几年之后,这里有很多我什至不知道限制的地方。

但是只是添加一些其他东西...

您没有逐行调试器的原因恰恰是因为它是一个多租户平台。至少SFDC是这样说的-在这个线程丰富的编程时代,这似乎不是什么借口,但这显然是原因。如果必须编写代码,则可以使用“ System.debug(String)”作为调试器-我记得大约12年前在Java 1.2中具有更复杂的服务器调试工具。

我真正讨厌系统的另一件事是版本控制。Spring框架不用于Spring通常使用的框架-实际上,它是SFDC中的配置工具,而不是版本控制。SFDC提供零版本控制。

您会发现自己忙了好几天似乎很容易的事情,例如安排SFDC报告导出到CSV文件并通过电子邮件发送给收件人列表...嗯,最简单的方法是创建一个具有自定义字段,工作流规则和Visualforce电子邮件模板的自定义对象...,然后对于代码,您需要编写一个Visualforce组件,该组件将报告数据作为附件流式传输到Visualforce电子邮件模板,并编写匿名APEX自定义对象的代码计划字段更新...对于SFDC开发人员来说,这几乎是一项日常任务...试图将五种不同的技术结合在一起来完成看起来如此简单的任务....这可能会引起管理方面的麻烦以及紧张局势-通常,您会在得到建议后做一些不做的事情后才发现这一点。不能在用户社区中工作(就像某人已经说过的那样),然后尝试许多事情,在开发它们之后,您会发现它们只是出于某种奇怪的原因而无法工作-例如“您无法安排“ VisualForce页面”,或“您不能从可调度的上下文中调用getContent”或其他一些不可思议的原因。

SFDC平台上有很多疯狂的小陷阱,一旦您知道为什么它们在那里,这是有道理的……但是它们仍然是非常糟糕的限制,使您无法做需要做的事情。这是我的一些。

  1. 您几乎无法在任何类型的记录上“开箱即用”地获得记录所有者的信息-您必须编写触发器,将创建记录时的所有者与要插入的记录链接起来。为什么?简短的答案,因为所有者可以是“人”或“队列”,并且两者是完全不同的实体……是有道理的,但是它可以使项目从字面上倒过来。

  2. 令人震惊的安全模型。示例:“管理公共报告”权限与“创建和自定义报告”权限大不相同,并且基本上适用于平台上的所有内容……尤其是任何类型的文件夹。

  3. 如前所述,基本上不存在支持。如果您是一个非常自给自足的人,或者拥有很多SFDC资源,或者有很多时间和/或非常宽容的经理,或者负责运行良好的SFDC系统,那么您的情况就很好形状。如果您不在这些职位中,则可能会遇到麻烦。

SFDC是一个非常诱人的业务命题……没有设备占用空间,相当不错的安全性,固定价格,没有基础设施,而且您可以获得基于Web的CRM,具有可批处理和可调度的处理能力……但是正如其他消息人士所说,这确实是开发学习方面的发展相当快,如果您进行咨询,我认为我所看到的最低价格是200美元/小时。

在某些技术变得司空见惯之后的几年里,Salesforce倾向于与其他事物集成-想到JSON和jquery ...,如果您想与之进行集成的其他常见基础结构(例如JIRA),则期望支付很多额外费用,而且它们可能是越野车。

正如提到的其他海报之一一样,您一直在与总督限制相抵触,这只会使您发疯……附件不能大于5MB。期。有时<3MB(如果base64编码)。一个类中有十个HTTP标注。期。有数十种已发布的州长限制,而您无疑会发现很多,而您只是想用尽办公室的尖叫声。

我确实非常喜欢该平台,但请相信我-它可能是一位非常残酷的情妇。

但是为了公平起见,我要说的是:我发现平台的最大问题不是平台本身,而是巨大的期望,几乎所有看到该平台但尚未开发的人都有...。这些人往往在商业组织中处于权威地位;营销,销售,管理等方面。发生巨大的脱节,每天都在摇头,或者说每天都在摇头,这都是因为存在一个巨大的平台,那里充满了怪异的陷阱,成千上万的人每天都在挣扎着寻找为什么事情应该在什么时候起作用的想法他们只是不做,不会做。

编辑:
只是添加到lomaxx关于MVC的注释;用SFDC术语来说,这与所谓的“视图状态”密切相关-而且它确实可能有问题,因为VF页面上的内容不是该页面的控制器类中的内容。因此,当您单击“保存”按钮(或进行HTTP调用或其他操作)时,您必须经历怪异的旋转,以将页面上的内容与控制器要写入SF的内容同步....伙计,这很烦人。


+1表示版本控制。
林登·福克斯

7

我认为其他人已经更深入地解决了这些弊端,但是对我来说,它似乎并没有使用MVC范例或根本没有以代码重用的方式提供任何支持。与使用ASP.Net MVC之类的应用程序进行开发相比,执行简单应用程序之外的任何事情都是令人沮丧的练习。

此外,工具,数据层和在开发过程中尝试重构代码或重命名字段的挫败感也无济于事。

我认为,作为CMS,它很酷,但作为非CMS应用程序的平台,对我来说这没有意义。


6

安全模型也有非常严格的限制……但这并不是最糟糕的部分。您目前无法断言用户是否具有执行特定操作的能力。

您可以检查他们的角色是什么,但不能检查该角色是否具有执行当前操作的权限。

更糟糕的是,技术支持部门对“尝试采取措施,如果有异常,请抓住它”的响应。



3

综上所述,我很好奇,如何发布VMforce(允许Java程序员为Force.com编写代码)如何改变上述缺点?

http://www.zdnet.com/blog/saas/vmforcecom-redefines-the-paas-landscape/1071


它可以缓解某些问题,但是您仍然会绑定到Force.com数据库,该数据库非常糟糕,您将无法真正掌控部署。仍处于起步阶段,未来可能会有所改变,但是现在看来,它并不是一个过于引人注目的替代方案。
lomaxx 2010年


3

我想他们正在努力解决这些问题。在Dreamforce上,他们提到他们正在尝试将州长限制降低到仅4个。我不确定具体细节。他们拥有用于早期访问的REST API,并且购买了heroku,这是云中的红宝石开发。他们使用database.com拆分了数据库,因此您可以使用database.com进行所有Web开发和数据库调用。

我猜他们正在尝试使其尽可能不可知。但是现在所有这些都是公告和抢先体验,因此就像他们的“安全港”声明不购买他们所说的内容,而仅购买他们当前拥有的内容。


7年了,他们还没有解决上面列表中的任何一件事情。
el n00b
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.