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