Force.com平台的缺点
我们目前正在考虑使用Force.com平台作为我们的开发平台,销售人员和force.com网站充满了为什么它是世界上最好的平台。 但是,我期待的是使用这样一个平台的一些真正的缺点。
这里有10个让你开始。
- Apex是一种专有语言。 除了force.com Eclipse插件之外,几乎没有可用的工具,例如重构,代码分析等。
- Apex是以被认为落后于其他语言的Java 5为模型的,没有工具(见#1),可能相当麻烦。
- 部署仍然是相当手动的,有很多陷阱和手动步骤。 随着时间的推移,这种情况正在逐渐改善,但如果您习惯于自动部署,则会感到失望。
- Apex缺less包/名称空间。 所有的类,接口等都在服务器上的一个文件夹中。 这使得代码组织得更less,并且类/接口名称必须很长,以避免名称冲突并提供上下文。 这是我最大的抱怨之一,因为这个原因,我不会自由select在force.com上构build。
- “force.com IDE”,又名force.com eclipse插件,速度非常慢。 保存任何文件,无论是类文件,文本文件等,通常需要至less5秒,有时最多30秒,具体取决于您的组织中有多less个对象,数据types,类文件等。 保存也是一个阻止行为,不仅需要编译,而且需要将本地项目与服务器完全同步。 数量级比Java或.NET慢。
- 在线开发者社区似乎不太健康。 我注意到很多论坛post都没有回复或者没有解决。 我认为这可能与salesforce.com使用的论坛软件有关,这似乎很难。
- Apex的数据接入DSL有很多不足之处。 它甚至不像(N)Hibernate,JPA等等。
- 在Apex / VisualForce上开发应用程序是州长极限工程的一个练习。 很容易的一半程序员时间花费在尝试优化以避免众多的州长限制和其他诸如visualforce查看状态限制等陷阱。 有人可能会认为,如果你编写高效的代码开始,你将不会有这个问题,这是真的在一定程度上。 然而,有很多次你有正当的理由在一个会话中进行x个以上的查询,或者循环超过x个logging等。
- save-> compile->运行周期非常缓慢,尤其是, 当涉及到压缩和上传整个静态资源包只是为了做一些像testing一个小CSS或JavaScript的变化。
- 一般来说,一个年轻的,新兴的平台的痛苦,没有开源的好处。 您无法validation和/或修复平台中的错误。 他们说要把它发布到他们的IdeaExchange。 是的,祝你好运。
免责声明/信息披露:托pipe平台(如force.com)有许多好处。 Force.com确实定期增强该平台。 有很多我喜欢的东西。 我在force.com上赚钱
我看到你已经得到了一些答案,但是我想重申一下,在这个平台上有多less时间浪费在州长身上。 尽pipe我在某个层面上喜欢这个平台,但是我强烈地强烈地推荐它作为一个通用的应用程序开发平台。 如果这是您想要的,那么它就是一个超级可configuration和可扩展的CRM应用程序。 虽然他们的营销在推动Force.com作为一个通用开发平台的想法方面是非常出色的,但它甚至还没有接近完成。
build立一个稳定的平台和避免大的性能和稳定性问题的效率很容易被浪费在试图对人们提到的限制进行编码上。 平台有如此多的限制,它变得完全疯狂。 这些限制并不是高端的限制,一旦你有很多的用户,你几乎可以立即打到他们。
虽然通常有解决这些问题的技术,但是在您尝试开发实际应用程序的业务逻辑时,很难找出避免这些策略的策略。
为了让您对开发人员如何使环境变得不友善有一个简单的认识,请参阅上面提到的“缺lessdebugging环境”。 比这更糟糕。 在debugging日志中,最多只能查看最近20次到服务器的请求。 因此,当您在应用程序内开发时,您必须创build一个“新的”debugging请求,select您的名字,点击“保存”,切换回您的应用程序,刷新页面,点击回到您的debugging选项卡,尝试查找请求将存放您的debugging日志,点击“查找”来search您正在查找的文本。 这就像点击10次来查看debugging输出。 虽然这看起来可能微不足道,但这仅仅是对开发者的经验给予多less关心和考虑的一个例子。
关于开发平台的一切都是事后的补充。 它是什么,但大部分是PITA。 如果你不知道自己在做什么(就像你已经通过authentication并且对Apex有非常深刻的理解一样),那么你很容易就会在另一个环境中花费10-20倍的时间如果你甚至可以成功的话,看起来似乎是一件荒谬的事。
总督的限制确实是不好的。 你有各种限制(数据库查询,返回的行,“脚本语句”,未来调用,标注等)的组合,你必须确切地知道你在做什么,以避免这些限制。 例如,如果在对象上有一个计算出的汇总“公式”字段,并且在子对象上有一个触发器,则它将执行父对象触发器并根据您的限制对这些触发器进行计数。 像这样的事情是不明显的,直到你经历了尝试和失败的痛苦过程。
你会尝试一件事来避免一个限制,并在一个永无止境的“限制”游戏中再次击中另一个限制。 在这个过程中,您将不得不彻底重新构build您的整个应用程序和方法,以及重写所有的testing代码。 您必须将75%的testing代码覆盖率部署到生产环境中,这实际上是非常好的事情,但是与其他所有限制相结合,这是非常麻烦的。 实际上,你将达到限制编写你的testing代码的限制,而这在正常用户的情况下是不会出现的,但是这会阻止你实现覆盖。
这并不是说其他许多问题。 包装不是你所期望的。 您无法打包您的应用程序并将其交付给用户,而无需组织pipe理员的大量用户干预和configuration。 AppExchange完全是一个玩笑,为了让你的应用程序上市,他们甚至开始收取5K的费用。 用数据加载器导入很糟糕,特别是如果你有任何触发器。 您不能一步导出包含关系的所有数据,以便可以轻松地在一个步骤(例如开发组织)中重新导入到另一个组织中。 您只能从生产中每月刷新一次沙箱,没有例外,您不能在默认情况下刷新数据,除非您已经打电话给您的客户经理来解锁该function。 您不能批量删除自定义对象中的数据。 你不能改变你的软件包名称。 某些事情可能需要很多天才能完成,例如在部署应用程序之前进行数据备份,而且没有任何进度报告,也不知道导出时间。 如果数据之间存在关联,那么存在数据的同步性问题,那么存在严重的数据完整性问题,因为没有可以在单个步骤中导出多个对象的“事务”。 可能有一些商业工具可以促进其中的一些,但是这些对于那些没有大量预算的开发者来说是无法实现的。
其他人在这里所说的其他一切都是真实的。 有时可能需要5秒到1分钟的时间来保存文件。
我并不是说那么消极,因为这个平台在某些方面非常酷,而且他们正试图在一个没有其他人正在做的多租户环境中做事。 这是一个非常创新的环境,在某些层面上很强大(我真的很喜欢VisualForce),但是再给它一两年的时间。 他们正在与VMware合作,也许这会导致开发者更多地使用围栏而不是监狱牢房。
在过去两周左右的时间里,我花了一些时间在平台上进行开发,以下是我可以给你的一些事情:
-
没有RESTful API。 他们有一个基于SOAP的API,你可以打电话,但是没有办法做出真正的安宁的电话
-
有没有简单的方法来把他们的SObjects,并将其转换为JSON对象。
-
视觉力量页面是好的,直到你想定制他们,然后这是一个痛苦的整个世界。
-
可视化的页面需要绑定到SObjects,否则无法获得标准的input字段,如datepicker或select列表工作。
-
如果你想自己工作,eclipse插件是可以的,但是如果你想在eclipse插件的大团队中工作,忘记它。 它不处理同步和从服务器,它崩溃,并没有真正有用的。
-
没有debugging器! 如果你想debugging,这是由system.debug语句debugging。 这可能是我发现的最大的问题
-
他们的“MVC”模型并不是真正的MVC。 这更接近ASP.NET Webforms。 您的观点不仅与模型紧密结合,还与控制器紧密结合。
-
存储大量的文件是不可行的。 我们需要存储超过100GB的文件,我们被引用了一些荒谬的数字。 我们决定在amazons S3基础架构上实现我们的文档存储
-
即使这种语言是基于Java的,它不是Java。 您不能导入任何外部程序包或库。 此外,可用的基础库也受到严重限制,所以我们发现自己在外部实现了一堆东西,然后将这些位暴露为由force.com调用的服务
-
你可以调用外部的SOAP或REST服务,但是邮件正文限制在100kb以内,所以你可以调用它的限制性很强。
坦率地说,虽然在force.com平台上进行开发有潜在的好处,但是对于我来说,无法将force.com平台用于真正的企业级应用程序。 至多你可以写一些基本的粗糙风格的应用程序,但一旦你进入任何复杂的东西,我会避免像瘟疫一样。
哇,这里有很多,我甚至不知道是有限的 – 在平台上工作了几年。
但只是添加一些其他的东西…
你没有一行一行的debugging器的原因正是因为它是一个多租户平台。 至less这就是SFDC所说的 – 就像在这个线程丰富的编程时代,这不是一个很好的借口,但是这显然是原因。 如果你必须编写代码,你可以使用“System.debug(String)”作为debugging器 – 我记得大约12年前在Java 1.2中有更复杂的服务器debugging工具。
另一件我真正讨厌的系统是版本控制。 Spring框架并不是用于Spring通常使用的 – 它实际上是SFDC中的configuration工具而不是版本控制。 SFDC提供了ZERO版本控制。
你可以发现自己被困在一些日子里,看起来应该是非常容易的,比如说,安排一个SFDC报告,导出到一个CSV文件,然后通过电子邮件发送给收件人列表……那么最简单的方法是使用工作stream程规则和Visualforce电子邮件模板创build自定义对象…然后为了编写代码,您需要编写一个Visualforce组件,将报告数据作为附件stream式传输到Visualforce电子邮件模板,然后编写匿名APEX代码时间表自定义对象的字段更新…对于SFDC开发人员来说,这几乎是一项日常任务…尝试将五种不同的技术结合在一起来完成似乎如此简单的任务……而这可能会导致pipe理员头疼和紧张局势 – 通常情况下,你会得到一个build议,做一些不起作用的用户社区(如已经说过的人),然后尝试很多事情,你开发后,你会发现发现他们只是不工作的一些o DD球原因 – 就像“你不能安排一个VisualForce页面”,或者“你不能从一个可调度的上下文中调用getContent”或其他一些神秘的原因。
在SFDC平台上有这么多,很多棘手的问题,一旦你知道为什么他们在那里,这是有道理的…但是它们仍然是非常糟糕的限制,使你不能做你需要做的事情。 这是我的一些
-
您几乎不可能在任何types的logging上“开箱即用”地获取logging所有者信息 – 您必须编写一个触发器,将创buildlogging的所有者链接到您插入的logging。 为什么? 简短的答案,因为业主可以是一个“人”或“队列”,而这两个是完全不同的实体…是有道理的,但它可以把一个项目颠倒过来。
-
疯狂的安全模型。 例如:“pipe理公开报告”权限与“创build和自定义报告”的权限大不相同,基本上适用于平台上的所有内容……特别是任何types的文件夹。
-
如前所述,支持基本上是不存在的。 如果你是一个非常自给自足的人,或者有很多SFDC资源,或者有很多时间和/或非常宽容的经理,或者负责SFDC系统工作正常,那么你的工作很好形状。 如果你不在这些职位上,你会发现自己陷入深重的困境。
SFDC是一个非常诱人的业务主张…没有设备足迹,相当好的安全性,固定的价格,没有基础设施,并且你得到基于networking的CRM可以批量处理和可调度的处理…但正如其他海报所说,这是真的在开发学习方面相当陡峭,如果你去咨询,我认为我看到的最低价格是200美元/小时。
在某些技术成为普通用户之后,Salesforce倾向于与其他东西进行整合 – JSON和jquery浮现在脑海中……如果您有其他常见的基础架构需要与JIRA进行整合,他们可以是相当多的马车。
而作为其他海报中提到的其中一个,你总是在与州长的限制,可以驱使你坚果…附件不能超过5MB。 期。 有时<3MB(如果base64编码)。 在一个类中的十个HTTP标注。 期。 有几十个已经公布的州长限制,其中有许多不是你无疑会发现的,只是想用尽办公室尖叫而已。
我真的很喜欢这个平台,但相信我 – 这可能是一个非常残酷的情妇。
但公平地说,SFDC就是这样说的:我发现平台本身并不是平台最大的问题,而是几乎所有看到这个平台但没有开发的平台都有着巨大的期望。这些人往往在商业机构中处于权威地位; 市场营销,销售,pipe理等。巨大的断开连接发生,头部滚动,或有可能每天滚动 – 所有这一切都是因为这个伟大的平台有怪异的陷阱,数以千计的人每天都在挣扎,为什么事情应该正常工作他们只是不会,也不会。
编辑:
只是为了增加lomaxx关于MVC的评论; 在SFDC术语中,这与所谓的“视图状态”(viewstate)密切相关,并且它可能是非常麻烦的,因为VF页面上的内容不是页面的控制器类中的内容。 所以,当你点击“保存”button(或者做你的HTTP标注或其他)时,你必须经历奇怪的旋转才能将页面上的内容与控制器要写入SF的内容同步。 。
我认为其他人已经更深入地讨论了这些缺点,但是对于我来说,似乎并没有使用MVC范式,或者完全支持代码重用。 除了使用简单的应用程序之外,任何事情都是在使用ASP.Net MVC之类的应用程序开发应用程序时感到沮丧。
而且,在开发过程中尝试重构代码或重命名字段的工具,数据层和挫败感并没有帮助。
我认为作为一个CMS非常酷,但作为非CMS应用程序的平台,这对我来说是没有意义的。
安全模式也是非常非常严格的……但这不是最糟糕的部分。 您目前无法断言用户是否有能力执行特定操作。
您可以检查他们的angular色是什么,但是您不能检查该angular色是否有权执行当前操作。
更糟糕的是技术支持对“尝试行动,如果有例外,赶上”
考虑到Force.com是一个“云”平台,它作为一个外部WSDL定义服务的客户端的能力是相当令人沮丧的。 请参阅http://force201.wordpress.com/2010/05/20/when-generate-from-wsdl-fails-hand-coding-web-service-calls/,以了解您可能最终需要做的事情。;
综上所述,我很好奇VMforce如何发布,让Java程序员为Force.com编写代码,改变上面的缺点?
http://www.zdnet.com/blog/saas/vmforcecom-redefines-the-paas-landscape/1071
我想他们正试图解决这些问题。 他们在梦想中提到他们正试图将总督的限制降到只有4人。我不确定细节是什么。 他们有一个用于早期访问的REST API,他们购买了Heroku,这是一个在云中开发的ruby。 他们分开数据库,与database.com,所以你可以做你所有的Web开发和你的数据库调用使用database.com。
我想他们正在试图尽可能把它作为不可知论者。 但是现在这些都是公告和早期访问,所以他们的安全港声明不会根据他们所说的购买,而只是根据他们目前所拥有的。