Coding style 您如何决定是使用库还是编写自己的实现

Coding style 您如何决定是使用库还是编写自己的实现,coding-style,Coding Style,受此启发,这场战争一开始是无辜的,但现在正演变成一场大战 假设你需要一个实用的方法——相当简单,但不是一行。引用的问题是如何将字符串重复X次。您如何决定是使用第三方实现还是编写自己的实现 第三方方法的明显缺点是,您正在向代码中添加依赖项。 但是,如果你正在编写自己的代码,你需要对它进行测试,(也许)对它进行分析,这样你可能会花费更多的时间 我知道这个决定本身是主观的,但你用来做出决定的标准不应该是主观的 那么,您使用什么标准来决定何时编写自己的代码呢?如果它是一个微不足道的函数,那么不值得使用整

受此启发,这场战争一开始是无辜的,但现在正演变成一场大战

假设你需要一个实用的方法——相当简单,但不是一行。引用的问题是如何将字符串重复X次。您如何决定是使用第三方实现还是编写自己的实现

第三方方法的明显缺点是,您正在向代码中添加依赖项。 但是,如果你正在编写自己的代码,你需要对它进行测试,(也许)对它进行分析,这样你可能会花费更多的时间

我知道这个决定本身是主观的,但你用来做出决定的标准不应该是主观的


那么,您使用什么标准来决定何时编写自己的代码呢?

如果它是一个微不足道的函数,那么不值得使用整个库

如果它是一个非平凡的函数,那么它可能是值得的


如果多个函数都可以通过拉入单个库来处理,那么它几乎肯定是值得的。

10个问题…

+++(使用图书馆)(编写自己的库)

  • 图书馆正是我需要的吗?只需几个步骤就可以定制+++
  • 它提供几乎所有的功能吗?易于扩展+++
  • 没时间了+++
  • 上半场打得好,下半场打得好++
  • 很难扩展,但是很好的文档++
  • 很难扩展,但大部分功能都可以吗+
  • 功能正常,但过时了-
  • 功能正常。。但是奇怪(疯狂的界面,不健壮,…)--
  • 图书馆工作,但需要决定的人是在海布里斯州---
  • 库工作,可管理的代码大小,公文包需要更新--- 一些想法…

    如果它很小但很有用,可能对其他人也有用,那么为什么现在要编写一个库并将其放到web上呢。发布这种小型库的成本降低了,同时也减少了其他人登录的障碍(请参阅或)。那么标准是什么

    也许它不应该完全复制现有的已知库。如果它复制了现有的东西,它应该从新的角度来处理问题,或者更好的是,它应该提供一个更短或更简洁的解决方案


    */乐趣

    一般决策

    在决定使用什么之前,我将创建一个库必须满足的标准列表。这可能包括规模、简单性、集成点、速度、问题复杂性、依赖性、外部约束和许可证。根据具体情况,做出决策所涉及的因素将有所不同

    通常,在编写自己的实现之前,我会寻找一个合适的库来解决这个问题。如果我必须写我自己的,我将阅读适当的算法,并从其他实现中寻求想法(例如,使用不同的语言)

    如果在完成了下面描述的所有方面之后,我找不到合适的库或源代码,并且我已经进行了搜索(并在合适的论坛上询问),那么我将开发自己的实现

    复杂性

    如果任务相对简单(例如,多值映射类),则:

  • 查找现有的开源实现
  • 整合代码
  • 重写它,或者删减它,如果它过多的话
  • 如果任务复杂(例如,灵活的面向对象图形库),则:

  • 找到一个可编译的开源实现(开箱即用)
  • 执行它的“你好,世界!”等价物
  • 根据需要执行任何其他评估
  • 根据问题域标准确定其适用性
  • 速度

    如果库速度太慢,则:

  • 配置它
  • 优化它
  • 将结果反馈给社区
  • 如果代码太复杂而无法优化,并且速度是一个因素,那么与社区讨论并提供分析细节。否则,请寻找一个等效但更快(可能功能更少)的库

    API

    如果API不简单,则:

    • 写一个门面并把它贡献给社区
    • 或者找到一个更简单的API
    大小

    如果编译的库太大,则:

    • 只编译必要的源文件
    • 或者找一个较小的图书馆
    错误

    如果库没有开箱即用地编译,请寻找替代方案

    依赖关系

    如果图书馆依赖于外部图书馆的分数,寻求替代方案

    文档

    如果没有足够的文档(例如用户手册、安装指南、示例、源代码注释),请寻求替代方案

    时间限制

    如果有足够的时间找到最佳解决方案,那么就这样做。通常没有足够的时间从头开始写。通常有许多类似的库需要评估。请记住,通过细致的松耦合,您始终可以将一个库替换为另一个库。首先,找出有效的方法,如果它后来成为负担,就替换它

    开发环境

    如果库绑定到特定的开发环境,请寻找替代方案

    许可证


    对我来说,这是一个相当简单的答案

    如果您需要具有成本效益,那么最好尝试找到一个满足您需要的库/框架。如果您找不到它,那么您将被迫编写它或找到不同的方法

    如果你有时间并且觉得很有趣,写一篇。在这一过程中,您将学到很多东西,您可以通过新的代码包回馈开源社区。如果你没有,那就不要。但是如果你找不到,那你还是得写出来;)