您认为哪个库/框架过于复杂,无法解决所要解决的问题?[关闭]


12

...并“手动”编码功能?

作为一个相当隐喻的示例,您几乎不需要用于求解二次方程的库,尽管此类库确实存在并且有人认真对待它们。

作为一个更可疑的案例,根据情况,我可能会抛弃jQuery(例如,当我不需要支持某些石器时代的浏览器时):它确实简化了某些事情,但又为DOM增加了另一层复杂性和不可靠性。过度使用jQuery会导致荒谬的问题,例如最近在SO上看到的一个问题:如何a使用jQuery 为标签分配空的href ?原来这是一个HTML问题,甚至不是JavaScript。

对于许多人来说,另一个荒谬而又不明显的情况是使用在另一个模板系统PHP之上构建的一些模板引擎/语言。吸引任何人的第三层?

还有一个:有时候(仅用)吐出XML printf比使用一些怪异的XML引擎容易得多。

根据您的经验,还有其他情况吗?


4
像其他任何工具一样,您可以在适当的地方使用jQuery。如果您有钥匙,则不要用锤子和凿子打开前门。
罗伯特·哈维

1
@Robert Harvey:当然,但是在软件工程中,我们经常在识别键和锤子方面遇到困难。这就是帖子的内容。
mojuba 2010年

请记住,不管流行的库多么复杂,对于其他人来说,比您自定义的“简单”库要容易理解几个数量级,因为它们已经习惯了。
Louis Kottmann

@RobertHarvey您的门必须比我的门好得多。
Jimmy Hoffa 2013年

Answers:


14

一点使用后,许多MS企业库和大多数.net的第三方控件都让我有这种感觉。

你的旅费可能会改变


2
同意-大多数企业库都是混乱的或不直观的,还有一些第三方库的表现更好。但是,当然,如果您给微软打头衔,那肯定是“最佳实践”
沃森,2010年

在早期,entlib做了一些很难做到的事情,或者在早期的框架中弄不出来……这些天,似乎大部分是对早期版本的向后兼容,或者是您在未来版本中看到的部分烘焙的解决方案。更好的形式。
法案

13

Windows Communication Foundation

在首页上有一张瑞士军刀的图片,这一事实为我总结了一切。想象一下,XML配置大约是您编写的实际代码的四倍,并且编写在C#,Java,PHP,Python以及它所“假定”的所有其他语言之间可互操作的SOAP服务仍然非常困难。与...互操作

在以后的所有项目中,我都将坚持使用REST。


2
WCF 4.0完全不需要XML配置文件。我没有与其他技术进行互操作的经验(除了使用WCF作为客户端,这很好用),但是我可以说我发现它既简单又直观。即使我没有阅读任何书籍或接受任何培训(也没有满足截止日期)就开始使用它,我还是能够一臂之力。
Allon Guralnek,2010年

4
我已经将“ WCF”重命名为“ WTF”。
MetalMikester 2010年

1
@Allon:我承认我还没有尝试过WCF 4.0,很有可能他们在该领域进行了重大改进……
Dean Harding 2010年

12

我对人们“自己动手”所遇到的问题之一是-尽管他们的方法通常更快,更简单-但它也更容易变脆,有错误,不完整和/或包含安全漏洞。

一个简单的例子:使用printf发出XML可能比使用库容易十倍:

printf("<xml>%s</xml>", str);

但是您还记得在其中转义特殊字符str吗?例如“ <”和“ &”?有人可能会说“不,我没有”,然后继续写:

printf("<xml><![CDATA[%s]]></xml>", str);

但是,如果str其中包含子字符串“ ]]>”,它仍然会发出损坏的XML 。边缘情况-当然可以。但是仍然是一个有效的方案,它可能导致意外的问题并带来严重的后果。

在很多时候和地方“自己动手”可能是合适的,但是有时需要大量的经验和知识来确定什么时候合适。这就是为什么我经常鼓励程序员更喜欢使用已建立的库(如果有)而不是自我实现的例程。


11

Log4Net

该库很好,但是文档太糟糕了。对于我想做的事,这太过分了。

我改用Trace


1
罗伯特,你也打败我了,你这无赖!我只是看着log4net并认为:“哇,这些侦听器很酷。现在我该如何使用它呢??” 然后我认为到我想通的时候,我就可以写出自己的了。
JohnL

5
真的-我不得不尊重地不同意-它没有比log.error()更简单的了。
沃森

3
@沃森:如果真的那么简单,为什么还要一个框架呢?
罗伯特·哈维

我使用了耗时数分钟来配置的Object Guy替代方案,但由于Log4Net不必要的复杂性而推迟了替代方案。
cjmUK 2010年

7

的SharePoint

别误会,如果您需要SharePoint附带的大多数功能(并且附带很多功能),SharePoint就是很棒的选择,但是如果您不知道自己在做什么,或者只需要一两个,就可以了。东西,这是完全不值得的努力和配置。


6

ASP.NET WebForms-尽管作为.NET Web开发人员已经很长时间了,但是自从我开始使用MVC框架(并且来自PHP / Smarty Template环境)以来,您就意识到有时会有更好的选择进行Web开发的方法及其使用的抽象是过度的和漏洞的


我认为您的意思是不同于ASP.NET MVC的ASP.NET WebForms。正确?
埃里克·金

@Eric-是的,我应该解决这个问题!
沃森

3

在几乎每种情况下,我都为此感到遗憾:

  • 由于代码的可维护性,使用PHP oci_ *函数而不是包装器库被认为是一个不好的举动。将所有代码移植到Zend_Db使得开发维护数据库代码更加容易。
  • 考虑到其他一些网格组件的发展速度,滚动自己的ajax网格组件需要花费太多时间才能进一步开发。我目前正将其全部移植到Ext JS网格中,因为有了这些,就可以使用大量的第三方功能。
  • 避免使用诸如prototype和jquery之类的库会导致反复出现跨浏览器问题,这些问题通常很难追踪。Ext JS端口解决了我的跨浏览器问题。即使这是一个庞大的框架,我花了数周的时间来理解,它还是很神奇的。

我得出的结论是,最好选择一些可靠的第三方框架,并将其用作您所做的一切的基础。这些框架是由其他人开发和调试的,一旦您对其进行了标准化并很好地理解它们,这将节省大量的时间。


+1。如果这些库是开源的,这将有所帮助。继续并将源代码下载到您正在使用的所有库中(如果尚未下载的话)。读取库的源代码是诊断和修复问题的好方法,同时也是向其他程序员的代码(大概质量很高)学习的机会。
Mike Clark

2

System.Text.RegularExpressions

正则表达式是如此复杂且如此缓慢。我很少使用Regex,通常会写自己的文本解析和匹配。

有时,我会发现Regex对于真正复杂的匹配很有用。


您是否正确编译了regexp [或System.Text.RegularExpressions慢于Perl&co。实施]?
Maciej Piechotka

3
与手动字符串解析相比,Regex可能相对较慢,但是它比许多人认为的要快,通常对于大多数实际应用而言,它的速度已经足够快。
Mike Clark,2010年

2
我不认为这实际上是对.NET实现的抱怨,因为它没有特别复杂或缓慢的事实(实际上,我发现它是可用的更快的实现之一)。至少,这是我的经验。当然,一般而言,正则表达式很容易变得复杂,并且人们倾向于在完全不合适的地方使用它们。
迪恩·哈丁

2

并不是说Delphi4PHP需要任何不好的表现,但是我尝试了它(2.0版),并且很难按照我的意愿来做。我想用它制作一个youtube风格的网络应用程序供客户观看培训视频,但是它太麻烦了,当我尝试将其组合PHP框架(VCL4PHP,Zend,Smarty和Recess)时,我遇到了不可避免的问题,必须重新命名一切,因为PHP 5中没有名称空间问题。

话虽这么说,但我最终并没有坚持到底。我只是从错误中吸取了教训,并决定使其变得非常简单,并使用CodeIgniter和FlowPlayer(与JQuery一起使用)。

我很想知道,无论哪种框架使PHP 5鲜活起来,PHP 6都会有一些很棒的框架,它们可能实际上可以很好地结合在一起使用。


2

威卡

我做了很多机器学习工作,如果我只需要朴素的贝叶斯(Naive Bayes)或逻辑回归等简单的东西,我喜欢放弃Weka。它具有一些相当复杂的机器学习算法的良好实现,但是该API是过度过度设计的过度面向对象的老式Java API。让我烦恼的事情:

  1. 它滚动其自己的可调整大小的数组,而其他数组则不使用它,从而确保来回转换忙碌的工作。

  2. 许多顺序耦合,其中方法必须按特定顺序调用,除非您真的非常仔细地进行RTFM,否则您将不会意识到。

  3. 每个实例都必须是一个Instance对象,并且我必须使用Attribute对象显式声明它是名义对象还是数字对象。这导致大量的繁琐工作将数据转换为Weka想要的形式。这尤其令人讨厌,因为Weka API抛出了太多异常,以至于代码编译并不意味着它无论如何都可以工作。如果我在设计API,那么我会放心接受(也许只是获取一个对象数组),然后对数据进行内省以弄清楚我得到了什么以及如何正确地使用它。


2

在一个特定的项目中,我放弃了EJB3。它给了我依赖注入和容器管理的事务处理。但是它引入了巨大的依赖关系(例如JBoss),并使系统难以为其编写自动测试。现在,我将其简化为JPA +构造函数依赖项注入。


1

在应用程序的调试端口上吐出HTML。我需要一些简单的方法来获取一些当前数据(自动刷新)。引入一个库来格式化它会很好,但是只打印它就容易了。

我还拒绝了库的另一项建议:大多数情况下,我们使用大型,复杂的XML库。一天花了4个小时尝试使其在新应用程序中运行后,我只是说了“打包”,然后加入了TinyXML。它远没有那么强大,但只需花费很少的精力即可使其做简单的事情。


1

最近,我一直在研究可以在应用程序中使用的脚本语言编译器。我用过别人,但没有人能完全按照我的要求去做。所以我想了为什么不尝试自己写呢?真正适合一般使用可能需要一两年的时间,但这没关系。另外,它的学习经验很棒。

另一个“自己动手”的解决方案是用于翻译应用程序的部分。有现有的库,但我不喜欢其中任何一个。所以我做了自己的。

和Delphi的数据库组件一样。我讨厌 一直有。因此,我制作了自己的数据库界面,该界面的工作方式与我想要的一样(与我为PHP创建的界面完全一样,这使得跨语言的编码更加容易)。

基本上,当给出一个选项时,我通常会最终制作自己的库。


我知道你的意思。我可以向您展示整个STL,DB抽象,整个语言及其编译器或解释器的库,还有什么不可以。通常,您的同事和管理层都不欢迎它,但是,哪怕没有人关心它的程序员,也从未编写过编译器?
mojuba 2010年

0

哦,太多了。我已经使用开源API从事了许多敏捷项目。当他们工作时很好,但是我们经常遭受开发人员的迷恋,因为他们引入了各种第三方api,有些晦涩,有些则不是,只是因为他们想在其中使用一两个类。最终结果是一堆杂乱的代码,然后将系统砍在一起。他们把它移交给了有史以来最好的代码,离开了,可怜的家伙发现了一个难以理解的,没有证件的烂摊子,里面充满了依赖性问题和黑客。

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.