标签: code-reuse

程序员如何实践代码重用

我是一个糟糕的程序员,因为我正在复制和粘贴.一个例子是,每当我连接到数据库并检索记录集时,我将复制先前的代码并进行编辑,复制设置datagridview和编辑的代码.我知道短语代码重用,但我实际上并没有使用它.我如何利用代码重用,这样我就不必复制和粘贴数据库代码和datagridview代码.

code-reuse

13
推荐指数
2
解决办法
2659
查看次数

带有angularjs和nodejs的SaaS应用程序,我如何组织不同的客户端?

我正在尝试决定该做什么我这个场景:

我想创建一个我想在SaaS商业模式中销售的产品,我已经或多或少地想到了后端,并且在nodejs中有一些代码.它处理oAuth,会话,并在访问某个端点时控制用户的角色.

怀疑是在前端架构中:每个客户端将共享相同的功能,但他们的页面设计将完全不同.我想在服务中加入尽可能多的app逻辑,所以我可以重用它,我的想法是只将控制器/模板/指令从客户端更改为客户端,这样可以吗?

我应该有不同的文件夹,并为nodejs中的每个客户端提供静态文件吗?例如:在nodejs中我会知道client1的url被调用所以我会提供client1-index.html吗?

我应该将每个客户端放在他们自己的nodejs服务器和他们自己的主机中吗?

有什么其他方式?

我希望能够轻松地重用这些服务,因为我将引入功能的更改或添加更多,我想轻松地进行此升级.

还将有一个管理面板,对于所有这些面板将完全相同,将更改的部分是我的客户的用户看到的部分.

可以把它想象成拥有许多客户并给他们每个人一个商店,这样他们就可以卖掉他们的东西.他们想要一个管理页面和一个公共页面.管理页面对所有人都是相同的,但公共页面必须更改.

那么,并且应用程序在用户之间共享相同的功能,但对于每个用户而言看起来完全不同,您将如何做到这一点?

code-reuse saas reusability node.js angularjs

13
推荐指数
1
解决办法
1531
查看次数

如何为可重用组件组织Redux状态?

TL; DR:在具有管理其自己的状态有些复杂的逻辑可重用的组件的情况下(认为:与autocompleter Facebook的评论文字区域,表情符号等),一个人如何使用存储,操作和减速器进行管理的多个实例的状态这个组件遍布整个网站?

考虑官方redux回购中的真实示例.在其中我们有:

  • 一个RepoPage,它显示谁已经出演一个特别的回购协议的用户列表中,
  • 一个UserPage,显示由特定用户加星标的repos列表
  • 一个List,它足够通用,可以显示用户列表或repos,提供了方法items和方法renderItem.特别是RepoPage使用User组件来显示为回购加星标的每个用户,并UserPage使用Repo组件来显示每个加星标的回购.

假设我真的希望所有的状态都在Redux中.

特别是,我希望每个RepoPage和UserPage上的每个List的状态都由Redux管理.在这个例子中已经通过一个聪明的三级深树来处理:

  • 在顶层,密钥表示它是什么类型的组件数据(在示例中称为store.pagination)
  • 然后,每个特定类型的上下文都有一个分支,其中组件可以是(store.pagination.starredByUser,store.pagination. stargazersByRepo)
  • 然后有与唯一上下文一样多的键(store.pagination.starredByUser[login],store.pagination. stargazersByRepo[repo])

我觉得这三个级别也对应于:组件类型,父类型,父ID.

但是,我不知道如何扩展这个想法,以处理List组件本身有很多子项的情况,其中一个状态值得在Redux中进行跟踪.

特别是,我想知道如何实现一个解决方案,其中:

  • User 组件保持完整
  • Repo 组件有一个切换其背景颜色的按钮
  • 每个Repo组件的状态由Redux管理

(我很高兴使用Redux的一些扩展,它仍然使用Reducer,但是不想使用"只是将它保持在React本地状态",为此问题的目的)

我的研究到目前为止:

  • 它看起来像在榆树​​上的操作(消息)是可嵌套以这样的方式代数数据类型,即父组件可以解压缩的消息的"外信封"和到子减速器传递旨在用于儿童一个内动作(更新).
  • 因为它是终极版公约使用字符串作为动作类型,上述想法的自然转换为使用前缀,而这似乎正是棱镜(foremly称为终极版-榆树)的作用:action.type是由通过组件树告诉路径的子串.OTOH在这篇评论中,棱镜作者tomkis解释说,Redux缺少的Elm Architecture最重要的部分是动作的组合
  • 上述两种方法似乎是重用Reducer Logic中描述的方法的扩展版本
  • 我还没有完全理解redux-fly如何在内部工作,但它似乎使用有效负载,而不是action.type通过其安装路径识别组件实例,store其中也对应于组件树中的路径,因为它的方式是由组件手动构建 …

code-reuse components separation-of-concerns redux

13
推荐指数
1
解决办法
2260
查看次数

我们是否放弃了代码重用的想法?

几年前,媒体上充斥着关于代码重用思想如何提高生产力和代码质量的各种文章.

从我定期检查的博客和网站看来,似乎"代码重用"的想法已经过时了.也许"代码重用"倡导者已经加入了SOA人群?:-)

有趣的是,当您在Google中搜索"代码重用"时,第二个结果标题为:

"内部代码重用被认为是危险的"!

对我来说代码重用的想法只是常识,毕竟看看apache commons项目的成功!

我想知道的是:

  • 您或您的公司是否尝试重用代码?
  • 如果是这样,在什么级别,即低级API,组件或共享业务逻辑?您或您的公司如何重用代码?
  • 它有用吗?

讨论?


我完全清楚有许多可用的开源库,任何使用过.NET或Java的人都会以某种形式重用代码.这是常识!

我更多地指的是组织内的代码重用,而不是通过共享库等社区中的代码重用.

我最初问过;

  • 您或您的公司是否尝试重用代码?
  • 如果是这样,在什么级别,即低级API,组件或共享业务逻辑?您或您的公司如何重用代码?

从我所在的位置,我看到很少有公司试图在内部重用代码?

如果你有一段可能在中等规模的组织中共享的代码,你会如何告知公司的其他成员这个lib/api/etc是否存在并且可能有益?

soa code-reuse components

12
推荐指数
2
解决办法
1821
查看次数

类如何帮助您管理大型应用程序?

这出现在我在网上的一次对话中,我发现我不知道这应该如何工作:相当多的程序员似乎只是把它作为一个给定 - 事实上,很明显,类是一种必要的语言管理大型软件项目的功能.

我不明白他们是如何做到这一点的.

我的问题是,你怎么知道的?哪些客观测量表明类可以提高生产力,重用代码并降低程序生产的复杂性?课程的哪些方面使其成为大型团队合作的理想选择?

现在,我想问一个问题,这有点难以表达.如果我弄错了,最后会让任何人感到困惑或愤怒,我很抱歉:

客观地说,您如何知道类的使用不是应用程序开始时的原因?也就是说,是否有可能使用其他代码重用策略编写具有相同功能的程序,代码少得多,小到不需要任何特殊措施来"管理"它?(有许多选择,例如函数式编程范例或面向方面编程).

最后一点是Steve Yegge在他的博客上暗示的东西.但是我对这个论点的双方都持怀疑态度,因为任何人都缺乏任何硬数据,而且没有足够的经验可以自己得出结论.

你怎么看?

编辑:特别是我感兴趣的是为什么许多程序员认为原型样式继承在大型应用程序方面不能胜任任务.对不起这个问题很模糊 - 这是我对这个话题缺乏了解的结果.

edit2:似乎对函数式编程的含义感到困惑.(我认为任何版本的VB都不具备功能,当然不是旧版本).请参阅维基百科文章. http://en.wikipedia.org/wiki/Functional_programming

edit3:让我强调一下,我正在寻找客观的措施.不是主观意见.

oop code-reuse functional-programming class scale

12
推荐指数
2
解决办法
546
查看次数

在JUnit 4中重用测试实现?

我有一个界面,例如:

public interface Thing {
  FrobResult frob(FrobInput); 
}
Run Code Online (Sandbox Code Playgroud)

和界面的实现(例如NormalThing,ImmutableThing,AsyncThing),我想测试.

我的许多测试方法都是关于确保接口正确实现,因此在每个Thing实现中都是重复的.在JUnit 3中,一个常见的解决方案是创建一个基类(扩展TestCase),然后由每个实现类进行子类化.但这是JUnit 4的正确方法吗?

可能的替代方案(我相信)优先顺序升序:

  1. Cut'n'paste重复的测试方法.根本不干,但我觉得在测试中不如生产代码那么令人担忧.

  2. 使用@Test方法创建一个抽象类,并为每个实现测试类创建子类.(通常在JUnit 3测试中看到 - 这仍然是进入JUnit 4的好方法吗?)

  3. 将常用测试方法放入辅助类中,并在每个实现上调用它.(组成而不是继承.)

做#3的最佳做法是什么?也许@RunWith(Parameterized.class)每个实现参数化的测试?或者有更好的方法来实现这一目标吗?

java code-reuse unit-testing junit4

12
推荐指数
1
解决办法
2487
查看次数

你如何在项目中实际使用可重用的django应用程序?

这个问题一直困扰着我好几天了,我试过在很多地方寻求建议,但似乎没人能清楚地回答它,甚至提供答案的参考.

我也尝试过搜索教程,但是我找不到任何类型的教程来解释如何使用可重复使用的第三方django应用程序(大多数教程解释了如何编写它们,没有解释如何使用它们).

另外,我看过这里:

如何在Django中重用可重用的应用程序 - 它没有解释如何在项目本身中实际使用它

和这里:

如何将多个可重用的Django应用程序绑定在一起? - aquaplanet的回答是有道理的,但我想我会问这个问题来解决我在试图理解这个问题时面临的心理障碍.


为了最好地解释这一点,让我通过例子这样做(注意,这不是我实际建立的东西).

我正在创建一个像Reddit一样的项目.我会有用户,链接和投票/积分.基于这个粗略的例子,我想重用3个(任意的)第三方应用程序:用户,投票/点和链接.

我决定将它们中的每一个用作任何其他python包(意味着它们将被视为包,并且不应该触及它们的代码)[这种方法实际上会起作用吗?或者你必须能够编辑第三方应用程序来构建项目??)

现在我的项目中有这些应用程序,我将使用主应用程序来处理所有模板内容(这意味着我在前端看到的所有内容都将在一个应用程序中).

然后,我将使用相同的主应用程序用于自定义逻辑(在views.py中)或者我将在不同的应用程序之间分解该逻辑(但仍将使用单个前端应用程序).

从上面的3个段落来看,这个结构是否适用(或者它可以工作)?


现在让我们说这个结构是适用的,我正在使用一个主应用程序用于前端和自定义逻辑.

我会在models.py中写些什么?如何将3个可重用应用程序中的内容集成到主要的 models.py文件中?

我如何在views.py中引用可重用的应用程序?让我们以contrib.auth为例

有了这个内置的应用程序,我会写:

from django.contrib.auth import authenticate, login, logout
@login_required
def user_logout(request):
logout(request)

return HttpResponseRedirect('/home/')
Run Code Online (Sandbox Code Playgroud)

虽然上面的代码很简单,但基本上是如何使用任何可重用的应用程序完成的?

我的问题很长,但我认为这个可重用的应用程序问题是很多开发人员对自己不太清楚的事情,也许这个答案会帮助很多其他人听说过可重用应用程序的承诺,但是没有了解如何实际使用它们.

python django code-reuse reusability django-apps

12
推荐指数
2
解决办法
5154
查看次数

ImportError:没有模块命名为<parent dir>

我正在尝试通过Python学习编程,所以如果这是一个荒谬简单的问题,我会提前道歉.

我试图简化我复杂的目录结构并利用Python的一些代码重用功能,我遇到了一个对我来说无法解释的ImportError错误.在过去的几个小时里,我一直在阅读有关Python的import,modulepackage功能(在这里,这里,这里,并在这里等等),但我仍然无法解决这个(貌似)简单的错误.

这是问题所在.

我有一个目录(dir),其中有一个子目录(subdir).每个目录包含几个文件.因此,我的整体目录结构如下所示:

dir/
    __init__.py
    draw_lib.py
    subdir/
        __init___.py
        drawing.py
Run Code Online (Sandbox Code Playgroud)

在我的drawing.py文件中,我尝试draw_lib.py使用以下行导入:from dir import daw_lib.py.它导致了ImportError: No module named dir.任何人都可以快速解释为什么我的drawing.py文件找不到我的dir目录?谢谢你的帮助.我完全迷失了,并希望一劳永逸地改进我的代码重用和目录结构.

python directory syntax code-reuse python-2.7

12
推荐指数
1
解决办法
3822
查看次数

我可以在Chrome扩展程序的不同部分之间共享代码吗?

比方说,我有一个功能:

var rand = function(n) {
    return Math.floor(Math.random() * n);
}
Run Code Online (Sandbox Code Playgroud)

我可以在没有copypaste的内容脚本和后台脚本中使用此功能吗?

谢谢.

javascript code-reuse google-chrome google-chrome-extension

12
推荐指数
1
解决办法
1743
查看次数

从另一个功能中重新规划和重复使用步骤

我正在尝试学习specflow,现在.目前我有2个功能文件.

在第二个功能文件中,我将重用第一个功能文件中的一个步骤.

Specflow会自动识别第一个功能文件中的步骤,当specflow为我的第二个功能生成步骤时,它很聪明,并且没有重新生成我重复使用的步骤.

但是这一步是给定步骤,它初始化要素类的成员字段.

在不使用场景上下文的情况下,如何重用初始化类成员的另一个功能文件中的步骤?

编辑

例如,如果您有一个已登录,则在多个功能文件中使用.此"Given"创建一个记录的用户对象,并将其作为成员存储在.cs功能文件中.

当您在另一个.feature中使用相同的Given时,Specflow不会在相应的.cs文件中重新生成它.当您调试正在使用它的场景时,它会从第一个.cs文件执行它.

但我无法访问第一个.cs功能文件的成员.我打算使用静态成员,但也许有另一种解决方案?

非常感谢.

code-reuse specflow

11
推荐指数
2
解决办法
1万
查看次数