灵感来自这个无辜地开始但正在变成一场大火焰战争的问题.
假设您需要一种实用方法 - 相当简单,但不是单行.引用的问题是如何重复X次字符串.您如何决定是使用第三方实施还是自己编写?
第三方方法的明显缺点是您正在为代码添加依赖项.但是如果你自己编写,你需要对它进行编码,测试它,(也许)对它进行分析,这样你最终可能会花费更多的时间.
我知道决定本身是主观的,但你用来达到它的标准不应该是.
那么,您使用什么标准来决定何时编写自己的代码?
Dav*_*vis 18
一般决定
在决定使用什么之前,我将创建一个库必须满足的标准列表.这可能包括大小,简单性,集成点,速度,问题复杂性,依赖性,外部约束和许可证.根据具体情况,决策所涉及的因素会有所不同.
通常,我会在编写自己的实现之前寻找合适的库来解决问题.如果我必须自己编写,我将阅读适当的算法并从其他实现中寻找想法(例如,使用不同的语言).
如果,在下面描述的所有方面之后,我找不到合适的库或源代码,并且我已经搜索(并在合适的论坛上询问),那么我将开发自己的实现.
复杂
如果任务相对简单(例如,MultiValueMap类),那么:
如果任务很复杂(例如,灵活的面向对象的图形库),那么:
速度
如果库太慢,那么:
如果代码太复杂而无法优化,速度是一个因素,请与社区讨论并提供分析详细信息.否则,寻找一个等效但更快(可能更少功能丰富)的库.
API
如果API不简单,那么:
尺寸
如果编译的库太大,那么:
错误
如果库没有开箱即用,请寻找替代方案.
依赖
如果图书馆依赖于外部图书馆的分数,请寻求替代方案.
文档
如果没有足够的文档(例如,用户手册,安装指南,示例,源代码注释),请寻找替代方案.
时间限制
如果有足够的时间找到最佳解决方案,那么就这样做.通常没有足够的时间从头开始编写.通常会有许多类似的库来评估.请记住,通过细致的松耦合,您可以随时将一个库换成另一个库.找到最初有效的方法,如果以后成为负担,请更换它.
发展环境
如果库与特定开发环境相关联,请寻求替代方案.
执照
开源.
10个问题......
+++(使用库)...... ---(写自己的库)
一些想法......
如果它是小而有用的东西,也可能对其他人来说,那么为什么现在写一个库并把它放在网上.发布这种小型库的成本下降,以及其他人调整的障碍(见bitbucket或github).那么标准是什么?
也许它不应该完全复制现有的已知库.如果它复制了现有的东西,它应该从新的角度解决问题,或者更好的是它应该提供更短或更精简的*解决方案.
*/有趣