标签: code-reuse

如何将大型Rails应用程序切割成可以协同工作的小型应用程序?

我和Django有点合作,我非常喜欢它的项目/应用程序模型:你可以通过组装一个或多个Django应用程序来构建一个Django项目.这些应用程序可以是自治的,或者某些应用程序可以构建在其他应用程序之上.应用程序可以轻松地依赖于另一个应用程序的模型,以及它的控制器(Django dudes称之为"视图")甚至它的视图(Django中的"模板").

我现在正在开发一个相对大规模的Ruby on Rails项目,我很惊讶地发现在Rails中显然没有简单的方法可以做同样的事情.基本上,在Rails中,一个项目=一个应用程序.我们的项目已经开始作为一个巨大的单片应用程序,我们现在正试图找出如何将其拆分为更小的块.

例如,我们当前的应用程序允许我们管理合作伙伴和合同(以及其他事项).我希望有一个"合作伙伴"应用程序来管理我们的合作伙伴(地址,联系人等)和"合同"应用程序,它将管理我们与合作伙伴的合同."合同"应用程序将依赖于"合作伙伴"应用程序(但为了避免循环依赖,我希望"合作伙伴"应用程序不了解"合同"应用程序).

目前,我认为以下是主要选项:

  1. 使这些应用程序通过REST请求进行通信(每个应用程序将充当Web服务):这很好,但它似乎禁止重用其他应用程序的视图.例如,如果"合作伙伴"应用程序有一个很好的页面来显示合作伙伴的详细信息,并且如果我想显示该页面,稍微修改一下,在合同详细信息页面的中间,我看不到其他方法可以做这是让"合同"应用程序通过REST请求向"合作伙伴"应用程序询问合作伙伴详细信息(它将获得对象表示,而不是视图),然后复制/粘贴合作伙伴详细信息页面的源代码来自"合作伙伴"app"到"合同"应用程序.
  2. 将这些应用程序转换为插件:不是很好,而且有点困难,但似乎允许模型和视图重用
  3. 使用svn external从应用程序到应用程序共享一些模型:简单但难看.

谢谢你的建议.

deployment code-reuse refactoring ruby-on-rails

7
推荐指数
1
解决办法
846
查看次数

代码重用和重构

重用代码与复制/粘贴的最佳做法是什么?

重用的问题可能是更改重用代码会影响许多其他功能.

这是好的和坏的:好的,如果更改是错误修复或有用的增强.如果其他重用代码意外破坏,因为它依赖于旧版本(或新版本有错误),那就太糟糕了.

在某些情况下,复制/粘贴似乎更好 - 粘贴代码的每个用户都有一个私有副本,它可以自定义而不会产生任何后果.

这个问题是否有最佳实践; 重复使用是否需要水密单元测试?

code-reuse refactoring

7
推荐指数
2
解决办法
2150
查看次数

C中非常简单的地图实现(用于缓存目的)?

我有一个程序,它读取文件中的gethostbyname()URL 并在每个URL主机上执行.这个电话很费劲.我想缓存它们.

C中是否有一个非常简单的基于地图的代码片段,我可以用来进行缓存?(我只是不想重新发明轮子).

它必须具有以下几点:

  • 具有许可许可的开源(想想BSD或公共域).
  • 非常简单:理想情况下不到100 LOC
  • 键是char*和值void*.无需复制它们.
  • 没有实际需要实现remove(),但是contains()需要或者put()应该替换价值.

PS:我标记了它的作业,因为它可能.我只是非常懒惰,并且想要避免在重新实现时遇到的所有常见陷阱.

c code-reuse map code-snippets

7
推荐指数
2
解决办法
5177
查看次数

如何组织大型代码文件?

我越来越意识到我的代码在任何单个文件中都可以很容易地跨越数百行,虽然我知道实现可能是合理的,但它仍然感觉凌乱和无组织.

我知道有些情况下需要很多代码,但最好的方法是组织它们吗?

我已经考虑过从方法中分离变量,privatepublics中分离变量internals但是我不想这样,因为我不禁想到ONE类的组件属于一个文件.

当我使用WPF窗口的代码隐藏时,整个事情变得更加复杂,WPF窗口似乎总是以指数速率迅速成长为一个巨大的混乱.

另外:C#有一个名为的关键字partial,它允许您在不影响功能的情况下将类拆分为任意数量的文件.但是,我注意到微软似乎只是partial用来隐藏你生成的代码(Winforms/WPF.)这让我质疑是否因为它有很多行而拆分一个类是合法的用法partial- 是吗?

谢谢

c# code-reuse code-organization partial

7
推荐指数
3
解决办法
2143
查看次数

避免在多种不同语言中编写相同的算法

我是一名Web开发人员,我观察到很多次我需要在客户端和服务器上使用相同的功能.所以我用JS以及PHP或任何服务器端语言编写它.我厌倦了这个.如果我必须改变它,那么我需要在两个地方改变它.如果我想将它用于某些手持设备,那么我将不得不再次使用Objective-C或Java等重写该代码.然后,如果我需要更改该功能,那么我将需要在任何地方更改它.

这有解决方案吗?如果我将通过ajax调用一些web服务,那么客户端将有延迟.如果它将在JS中,则无法从PHP或Java等中访问它.如果我使用其他语言的PHP中的某些服务,那么这也可能成为性能问题.

也有一段时间我们需要使用db或不使用db从某些参数输出这些函数作为输入.

我知道会有一些非常简单的解决方案,但我不知道.请告诉我一些语言无关的解决方案,因为我总是没有VPS.

我不确定我的问题是否真的属于stackoverflow.com或programmers.stackexchange.com所以请将它转移到programmers.stackexchange.com而不是关闭这个问题,如果它属于那里.

javascript code-reuse web-services language-interoperability

7
推荐指数
1
解决办法
257
查看次数

你保留多长时间?

我去年在C++中使用了一个数据结构类,因此在模板化代码中实现了所有主要的数据结构.我把它全部保存在闪存盘上,因为我觉得在我生命中的某些时刻,我会再次使用它.我想我最终编程的东西需要一个B树,还是只是妄想?您通常需要多长时间保存您编写的代码以便重复使用?

code-reuse

6
推荐指数
2
解决办法
890
查看次数

如何在SQL存储过程中重用代码?

我们使用SQL Server 2005.我们所有的数据访问都是通过存储过程完成的.我们的选择存储过程总是返回多个结果集.

例如:

CREATE PROCEDURE hd_invoice_select(@id INT) AS
    SELECT * FROM Invoice WHERE InvoiceID = @id
    SELECT * FROM InvoiceItem WHERE InvoiceID = @id
    SELECT * FROM InvoiceComments WHERE InvoiceID = @id
    RETURN
Run Code Online (Sandbox Code Playgroud)

我们的应用程序的数据访问层基于结果(O/R Mapper样式)构建对象图.

我遇到的问题是我们有许多不同的发票选择存储过程.它们都返回相同的结构,仅用于不同的选择标准.例如,我也有:

CREATE PROCEDURE hd_invoice_selectAllForCustomer(@customerID INT) AS
    SELECT * FROM Invoice WHERE CustomerID = @customerID
    SELECT * FROM InvoiceItem WHERE InvoiceID IN 
        (SELECT InvoiceID FROM Invoice WHERE CustomerID = @customerID)
    SELECT * FROM InvoiceComments WHERE InvoiceID = @id
        (SELECT InvoiceID FROM Invoice WHERE CustomerID = …
Run Code Online (Sandbox Code Playgroud)

sql sql-server code-reuse

6
推荐指数
1
解决办法
7770
查看次数

Visual Studio:您使用什么方法为类似项目"模板化"管道?

在构建ASP.NET项目时,需要完成一定数量的样板或管道,这在整个项目中通常是相同的. MVC和ALT.NET方法尤其如此.[我正在考虑以下事项:IoC,ORM,解决方案结构(项目),会话管理,用户管理,I18n等]

我想知道你最喜欢什么方法来"重用"这些管道跨项目?

  • 有一个'主解决方案',你复制并以某种方式重命名?(我现在正在使用这个程度,但它相当混乱.会对人们如何做得更好感兴趣)
  • 主要依靠共享库项目?(我发现这适用于某些事情,但对于必须定制的事情限制太多)
  • 代码生成工具,如T4?(类似于SharpArchitecture使用的方法 - 我自己没试过)
  • 别的什么?

asp.net-mvc code-reuse visual-studio

6
推荐指数
1
解决办法
245
查看次数

HTML中可重用的视图组件

你能用html创建可重用的组件吗?假设我想将一些css/html和js封装成一个整洁的可重用组件.Web开发人员如何做到这一点?我是来自地球的Flex,C#侧.

html code-reuse components

6
推荐指数
1
解决办法
3716
查看次数

如何在我自己的代码中构造 ParseIntError?

我想在我的函数中重用标准库ParseIntError。但是,我自己实现了输入字符串的解析,因此不需要返回标准库返回的错误值。

我没有找到构建价值的方法ParseIntError。我找到的唯一解决方案如下所示:

use std::num::ParseIntError;

fn from_str_radix(s: &str, radix: u32) -> Result<(), ParseIntError> {
    let error_empty = "".parse::<i32>().expect_err("get empty input error");
    let error_invalid_digit = "Z".parse::<i32>().expect_err("get invalid digit error");

    if s.is_empty() {
        return Err(error_empty);
    }

    for c in s.chars().rev() {
        match c.to_digit(radix) {
            None => return Err(error_invalid_digit),
            _ => unimplemented!(),
        }
    }

    Ok(())
}
Run Code Online (Sandbox Code Playgroud)

ParseIntError有没有更优雅的方式从我自己的代码返回?

error-handling code-reuse rust

6
推荐指数
1
解决办法
5460
查看次数