我们目前正在考虑使用Force.com平台作为我们的开发平台,销售人员和 force.com 网站充满了为什么它是世界上最好的平台的理由。不过,我正在寻找的是使用这样一个平台的一些真正的缺点。
9 回答
这里有 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 个记录等。
- 保存->编译->运行周期非常慢,尤其是。当它涉及压缩和上传整个静态资源包只是为了做一些事情,比如测试一个小的 CSS 或 javascript 更改。
- 一般来说,一个年轻的、羽翼未丰的平台没有开源的好处是很痛苦的。您无法验证和/或修复平台中的错误。他们说将其发布到他们的 IdeaExchange。是的,祝你好运。
免责声明/披露:托管平台(例如 force.com)有很多好处。Force.com 确实会定期增强该平台。我喜欢它的很多东西。我在 force.com 上赚钱
我看到您已经得到了一些答案,但我想重申一下在解决平台上的各种州长限制方面浪费了多少时间。尽管我在某些层面上很喜欢这个平台,但我强烈、高度、强烈地推荐反对它作为一个通用的应用程序开发平台。如果这是您想要的,它作为一个超级可配置和可扩展的 CRM 应用程序非常棒。虽然他们的营销在推动将 Force.com 作为一个通用开发平台的想法方面表现出色,但它甚至还远未接近。
拥有稳定平台和避免重大性能和稳定性问题的效率很容易被浪费在试图围绕人们所指的限制进行编码时。这个平台有很多限制,它变得完全令人抓狂。这些限制并不是一旦您拥有大量用户就会达到的高端限制,您几乎会立即达到它们。
虽然通常有一些技术可以绕过它们,但在您尝试开发实际应用程序的业务逻辑时,很难找出避免它们的策略。
为了让您简单地了解开发人员对环境的不友好程度,请以上面提到的“缺乏调试环境”为例。比那更糟。在调试日志中,您最多只能看到 20 个对服务器的最新请求。因此,当您在应用程序中进行开发时,您必须创建一个“新”调试请求,选择您的名称,点击“保存”,切换回您的应用程序,刷新页面,单击返回到您的调试选项卡,尝试查找将包含您的调试日志的请求,点击“查找”以搜索您要查找的文本。查看调试输出就像点击十次。虽然这可能看起来微不足道,但这只是一个例子,说明开发人员的经验是多么的不关心和考虑。
关于开发平台的一切都是事后才嫁接的。它的本质很了不起,但在大多数情况下都是一个完整的 PITA。如果您不确切知道自己在做什么(例如您已获得认证并且对 Apex 有非常深入的了解),那么您在其他环境中所做的时间很容易达到 10-20 倍以上如果您甚至可以成功的话,这似乎将是非常简单的事情。
州长的限制确实那么糟糕。您有各种限制(数据库查询、返回的行、“脚本语句”、未来调用、标注等)的组合,并且您必须确切知道要避免这些限制。例如,如果您在一个对象上有一个计算的汇总“公式”字段,并且您在一个子对象上有一个触发器,它将执行父对象触发器并根据您的限制计算这些触发器。在你经历了尝试和失败的痛苦过程之前,这样的事情并不明显。
您将尝试一件事来避免一个限制,并在永无止境的“打破限制”游戏中击中另一件事。在此过程中,您必须彻底重新构建整个应用程序和方法,并重写所有测试代码。您必须有 75% 的测试代码覆盖率才能部署到生产环境中,这实际上是非常好的事情,但结合所有其他限制,这非常繁重。实际上,您编写的测试代码在普通用户场景中不会出现,但这会阻止您实现覆盖范围。
更不用说一大堆其他问题了。包装不是您所期望的。如果没有组织管理员的大量用户干预和配置,您无法打包您的应用程序并将其交付给用户。AppExchange 完全是个笑话,他们甚至开始收取 5K 的费用,只是为了让您的应用上市。使用数据加载器导入很糟糕,尤其是在您有任何触发器的情况下。您不能在一个步骤中导出包含您的关系的所有数据,以便可以轻松地在一个步骤中将其重新导入另一个组织(例如开发组织)。您只能每月从生产中刷新一次沙盒,没有例外,并且默认情况下您不能将您的数据包含在刷新中,除非您已致电您的客户主管以解锁该功能。你可以' t 批量删除自定义对象中的数据。你不能改变你的包名。某些事情可能需要很多在您请求它们后几天才能完成,例如在您想要部署应用程序之前进行数据备份,一路上没有进度报告,也不太了解导出发生的确切时间。如果数据之间存在关系,则存在数据的同步性问题,因此存在严重的数据完整性问题,因为不存在可以在单个步骤中导出大量对象的“事务”之类的东西。可能有一些商业工具可以促进其中的一些,但这些对于可能没有大量预算的普通开发人员来说是遥不可及的。
其他人在这里所说的一切都是真的。有时保存文件可能需要五秒钟到一分钟的时间。
我并不是要这么消极,因为该平台在某些方面非常酷,而且他们试图在多租户环境中做其他人没有做的事情。这是一个非常创新的环境,并且在某些层面上非常强大(我实际上非常喜欢 VisualForce),但再过一两年。他们正在与 VMware 合作,也许这会给开发人员提供更多的游戏围栏,而不是监狱牢房。
在过去两周左右在平台上进行了相当多的开发后,我可以为您提供以下几点:
没有 RESTful API。他们有一个可以调用的基于肥皂的 API,但是没有办法进行真正的安静调用
没有简单的方法可以获取它们的 SObject 并将它们转换为 JSON 对象。
视觉力页面没问题,直到您想要自定义它们,然后这是一个痛苦的世界。
视觉强制页面需要绑定到 SObject,否则无法让标准输入字段(如日期选择器或选择列表)起作用。
如果你想自己工作,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 提供零版本控制。
您可能会发现自己被困了好几天,做一些看起来非常容易的事情,例如,安排 SFDC 报告以导出到 CSV 文件并通过电子邮件发送给收件人列表......好吧,最简单的方法是使用自定义字段、工作流规则和 Visualforce 电子邮件模板创建自定义对象......然后对于代码,您需要编写一个 Visualforce 组件,将报告数据作为附件流式传输到 Visualforce 电子邮件模板,然后编写匿名 APEX自定义对象的代码计划字段更新...对于 SFDC 开发人员来说,这几乎是一项日常任务...尝试将大约五种不同的技术放在一起完成看似如此简单的任务...这可能会导致管理上的头痛和紧张 - 通常情况下,你会在得到建议做一些不做的事情后发现这一点不能在用户社区中工作(就像有人已经说过的那样),然后尝试很多东西,在你开发它们之后你会发现它们只是因为一些奇怪的原因而不起作用——比如“你不能安排一个VisualForce 页面”或“您不能从可调度的上下文调用 getContent”或其他一些神秘的原因。
SFDC 平台上有很多很多令人抓狂的小问题,一旦你知道它们为什么在那里,这就是有道理的……但它们仍然是非常糟糕的限制,使你无法做你需要做的事情。这是我的一些;
您几乎无法在任何类型的记录上“开箱即用”地获取记录所有者信息 - 您必须编写一个触发器,将创建记录时的所有者链接到您正在插入的记录。为什么?简短的回答,因为所有者可以是“人”或“队列”,并且两者是截然不同的实体......有道理,但它可以彻底颠覆项目。
令人抓狂的安全模型。示例:“管理公共报告”权限与“创建和自定义报告”有很大不同,基本上适用于平台上的所有内容......尤其是任何类型的文件夹。
如前所述,支持基本上是不存在的。如果您是一个非常自给自足的人,或者拥有大量的 SFDC 资源,或者有大量的时间和/或非常宽容的经理,或者负责一个运行良好的 SFDC 系统,那么您就处于非常好的状态形状。如果你不在这些位置中的任何一个,你会发现自己陷入了大麻烦。
SFDC 是一个非常诱人的商业主张……没有设备占用空间、非常好的安全性、固定价格、没有基础设施,并且您获得了基于 Web 的 CRM,具有可批处理和可调度的处理……但正如其他海报所说,这真的是开发学习的进步很大,如果你去咨询,我认为我见过的最低价格是 200 美元/小时。
在某些技术变得司空见惯之后,Salesforce 往往会与其他事物集成 - JSON 和 jquery 浮现在脑海中......而且它们可能非常有问题。
正如其他海报中提到的那样,您一直在与州长限制作斗争,这可能会让您发疯……附件不能> 5MB。时期。有时 < 3MB(如果使用 base64 编码)。一个类中有十个 HTTP 标注。时期。有几十个已发布的州长限制,其中许多不是你无疑会发现并且只想尖叫着跑出你的办公室。
我真的,真的很喜欢这个平台,但相信我——它可能是一个非常残忍的情妇。
但为了公平起见,我想说的是:我发现该平台最大的问题不是平台本身,而是几乎所有看到该平台但尚未在其上开发过的人的巨大期望......这些人往往在商业组织中担任重要职位;营销、销售、管理等等他们只是没有也不会。
编辑:
只是为了添加 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/了解您最终可能要做的事情。
综上所述,我很好奇 VMforce 的发布,允许 Java 程序员为 Force.com 编写代码,如何改变上述缺点?
http://www.zdnet.com/blog/saas/vmforcecom-redefines-the-paas-landscape/1071
我猜他们正试图解决这些问题。在dreamforce,他们提到他们正试图将总督限制降至4。我不确定细节是什么。他们有一个用于早期访问的 REST API,并且他们购买了 heroku,这是一个在云中开发的 ruby。他们使用 database.com 拆分数据库,因此您可以使用 database.com 进行所有 Web 开发和 db 调用。
我猜他们正试图让它尽可能不可知论。但现在这些都是公告和抢先体验,所以就像他们的安全港声明一样,他们不购买他们所说的,只购买他们目前拥有的。