标签: legacy

为什么软件世界充满了状态代码?

为什么程序员开始使用状态代码?我的意思是,我想我可以想象,在文本字符串是一种昂贵的资源时,这可能会有用.WAYYY那时候.但即使我们有兆字节的内存可以使用,我们仍继续使用它们.模糊状态代码背后的错误消息或状态消息的含义有什么可能的优势?

legacy history

10
推荐指数
5
解决办法
638
查看次数

将大端字节集合编组到结构中以便提取值

有一个深刻的问题是从字节数组中读取C#中的C/C++数据结构,但我无法使代码适用于我的big-endian(网络字节顺序)字节集合.(编辑:请注意,我的真实结构不仅仅包含一个字段.)是否有办法将字节编组为结构的big-endian版本,然后提取框架的字节顺序(主机的字节顺序)中的值,通常是小端)?

(请注意,倒车字节数组将无法正常工作-每个值的字节必须扭转,不给你相同的集合倒车所有字节).

这应该总结我正在寻找的东西(LE = LittleEndian,BE = BigEndian):

void Main()
{
    var leBytes = new byte[] {1, 0, 2, 0};
    var beBytes = new byte[] {0, 1, 0, 2};
    Foo fooLe = ByteArrayToStructure<Foo>(leBytes);
    Foo fooBe = ByteArrayToStructureBigEndian<Foo>(beBytes);
    Assert.AreEqual(fooLe, fooBe);
}

[StructLayout(LayoutKind.Explicit, Size=4)]
public struct Foo  {
    [FieldOffset(0)] 
    public ushort firstUshort;
    [FieldOffset(2)] 
    public ushort secondUshort;
}

T ByteArrayToStructure<T>(byte[] bytes) where T: struct 
{
    GCHandle handle = GCHandle.Alloc(bytes, GCHandleType.Pinned);
    T stuff = (T)Marshal.PtrToStructure(handle.AddrOfPinnedObject(),typeof(T));
    handle.Free();
    return stuff;
}

T ByteArrayToStructureBigEndian<T>(byte[] …
Run Code Online (Sandbox Code Playgroud)

.net legacy mono interop endianness

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

如何在遗留Web应用程序中删除CSS spaghetti?

在处理了几个大型Web应用程序,并看到没有清晰结构的巨大样式表之后,我真的很想知道人们是否已经找到了保持css清理大型复杂Web应用程序的方法.

你如何从遗留的,混乱的CSS转移到清理,漂亮的级联,DRY样式表?

我目前正在开发的应用程序有12000行css.它早在没有标准或评论css的情况下就有机地增长到这个尺寸,唯一的规则就是让应用程序与设计相匹配.我们经常遇到的一些问题:

  • 冲突的样式:一个开发人员添加.header {font-weight:bold;}但是.header已经在其他模块中使用,并且不应该是那些粗体.

  • 级联问题:Foo小部件有一个.header但它还包含一个带有.header类的Bar小部件列表.

    • 如果我们定义.foo .header {...}和.bar .header {...},foo中未明确覆盖的任何内容都会显示在bar中.
    • 如果我们定义.foo> .header和.bar> .header但后来需要修改foo来包装div中的标题,我们的样式就会破坏.
  • 继承问题,我们不断将小部件字体重新定义为11px/normal,因为一些顶级容器使用12px/18 px行高.

  • 使用诸如dojo/dijit或jquery ui之类的库来对抗小部件库,这些库可以添加大量样式以实现功能,这意味着我们的代码充斥着我们必须覆盖库样式以使事物看起来恰到好处的地方.有大约2000行css只是为了调整内置dijit样式


我们正在考虑实施以下规则:

命名空间所有新的窗口小部件类 - 如果你有一个窗口小部件foo,所有的子类名将是.foo_,所以我们得到:.foo,.foo_header,.foo_content,.foo_footer.这使得我们的CSS基本上是FLAT,但我们看不到其他方法来组织我们的代码,而不会遇到上面提到的遗留样式或级联问题.

警察通用样式 - 有一小部分通用类,只适用于非常特殊的情况.例如.editable - 适用于应该调用编辑器的句子部分 - 应该只包含文本节点.

利用css编译器mixins要避免在不同的小部件中重复定义相同的样式,请定义并使用mixins.虽然我们担心mixins也会失控.

我们还能如何摆脱不断将回归引入可持续发展的css混乱.

css legacy refactoring web-applications

10
推荐指数
1
解决办法
1638
查看次数

JDK 1.6和Xerces?

在我当前的项目中,我们的目标是JDK 1.6 Runtime环境.对于传统rasons,Xerces JAR文件捆绑在应用程序中.

这些不再需要了吗?JDK(有一段时间)在JDK中捆绑了XML解析库吗?

java xml legacy

10
推荐指数
3
解决办法
2万
查看次数

使用MS-SQL Server设置Liquibase

我正在利用Liquibase(www.liquibase.org)进入我们的MVC3 SQL Server 2008项目来管理数据库迁移/更改.但是我遇到了第一个障碍:连接到Microsoft SQL Server实例.

我正在查看liquibase站点上的快速入门教程,但是为sql server DB交换了mysql

我运行这个命令:

liquibase --driver=sqljdbc.jar  --changeLogFile="C:\Temp\ChangeLog.xml"  --url="jdbc:sqlserver://localhost;databaseName=test"  --username=user --password=pass   migrate
Run Code Online (Sandbox Code Playgroud)

并收到此错误:

Liquibase Update Failed: Cannot find database driver: sqljdbc.jar
Run Code Online (Sandbox Code Playgroud)

我试过添加--classpath指向sqljdbc驱动程序没有运气.

如何使用liquibase创建或更新MS-SQL Server数据库?

legacy jdbc legacy-database liquibase sql-server-2008

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

Seam和Mock有什么区别?

自从我使用java遗留代码以来,这是几个月,这是我正在处理的一些事情:

  • 0%测试覆盖率.
  • 在我甚至看到一些超过300行代码的情况下,功能很大.
  • 很多私有方法和场合静态方法.
  • 高度紧密耦合的代码.

一开始我很困惑,我发现很难在遗产中使用TDD.在做了几周的katas并练习我的单元测试和嘲讽技巧之后,我的恐惧感降低了,我感到更加自信.最近我发现了一本书:有效地使用遗产,我没有看过它,我只是看了一下目录,我发现了一些对我来说很新的东西,The Seams.显然,这在遗产工作中非常重要.

我认为这个Seams可以帮助我打破依赖关系并使我的代码可以测试,这样我就可以增加代码覆盖率并使我的单元测试更精确.

但我有很多疑惑:

  • 有人可以解释一下接缝和模拟之间的区别吗?
  • 在测试之前,做Seams,在不涉及生产代码的方面打破TDD规则吗?
  • 你能告诉我一些比较Seam和Mock的简单例子吗?

下面我想粘贴一个我今天做的例子,我试图打破一个依赖,目的是使代码可以测试,最后增加测试覆盖率.如果你看到一些错误,如果你能评论一下,我将不胜感激?

这就是遗留代码在开始时的样子:

public class ABitOfLegacy
{
    private String sampleTitle;
    String output; 

    public void doSomeProcessing(HttpServletRequest request) {
    String [] values = request.getParameterValues(sampleTitle);
        if (values != null && values.length > 0)
        {
            output = sampleTitle + new Date().toString() + values[0];
        }

    }   
}
Run Code Online (Sandbox Code Playgroud)

如果我只是添加一个调用该方法并断言该变量输出的单元测试,在调用后有一定的值,那么我会犯一个错误,因为我不是单元测试,我会做集成测试.所以我需要做的是,摆脱我在参数中的依赖.为此,我用接口替换参数:

public class ABitOfLegacy
{
    private String sampleTitle;
    String output; 

    public void doSomeProcessing(ParameterSource request) {
    String [] values = request.getParameters(sampleTitle);
        if (values != null && …
Run Code Online (Sandbox Code Playgroud)

java legacy tdd unit-testing code-coverage

10
推荐指数
2
解决办法
5126
查看次数

将现有的遗留库转换为 es6 模块

注意:这是一个延续:将旧的 JavaScript 代码转换为 ES6 模块 .. 解决了 OPs 问题但没有提供答案。

所有现代浏览器现在都包含原生 es6 模块(除了我们希望很快登陆的 chrome)。问题是如何使用本机支持将现有库转换为 es6 模块。

这适用于使用转译(webpack、babel、system.js 等)供自己使用但依赖于遗留代码的当前项目。

是否有任何现有的工作流工具支持将旧库转换/包装为 es6 可导入?我真的很想避免<script>在页面的 html 中使用标签。

javascript legacy module ecmascript-6

10
推荐指数
1
解决办法
6551
查看次数

OpenProcessToken在Windows XP上使用Access Denied(5)失败

我的原型代码在我能够测试的每个Windows操作系统上运行良好,除了Windows XP.

当我在Windows XP上以管理员身份运行时,我在调用OpenProcessToken被拒绝访问(5).

我不知道有什么不同吗?

#include "stdafx.h"
#include <Windows.h>
#include <userenv.h>

#pragma comment(lib, "userenv")

void DisplayError(LPWSTR pszAPI)
{
    LPVOID lpvMessageBuffer;

    FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
        FORMAT_MESSAGE_FROM_SYSTEM,
        NULL, GetLastError(),
        MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
        (LPWSTR)&lpvMessageBuffer, 0, NULL);

    wprintf(L"ERROR: API        = %s.\n", pszAPI);
    wprintf(L"       error code = %d.\n", GetLastError());
    wprintf(L"       message    = %s.\n", (LPWSTR)lpvMessageBuffer);

    LocalFree(lpvMessageBuffer);

    ExitProcess(GetLastError());
}

void SetDebugPrivileges()
{
    void* tokenHandle;

    TOKEN_PRIVILEGES privilegeToken;
    LookupPrivilegeValue(0, SE_DEBUG_NAME, &privilegeToken.Privileges[0].Luid);
    privilegeToken.PrivilegeCount = 1;
    privilegeToken.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
    OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &tokenHandle);
    AdjustTokenPrivileges(tokenHandle, 0, &privilegeToken, sizeof(TOKEN_PRIVILEGES), 0, 0);
    CloseHandle(tokenHandle);
} …
Run Code Online (Sandbox Code Playgroud)

windows legacy winapi

10
推荐指数
1
解决办法
988
查看次数

你如何从遗留代码的FxCop开始?

有没有人有将FxCop引入遗留代码的经验?如果有人引入违反规则的代码,我们希望我们的构建失败.但就目前而言,这是不可能的,因为遗留代码有超过9000个违规行为.

抑制我所知错误的唯一方法是通过SuppressMessage属性,但这只适用于方法和GeneratedCodeAttribute.最后一个可以用于类和命名空间(如果我没记错的话),但不应该用于非生成的代码(参见这里).

现在,我们每天花一些时间来删除违规行为,但新的违规行为仍在继续,因为我们的构建不会失败.

有任何想法吗?

legacy fxcop legacy-code

9
推荐指数
1
解决办法
773
查看次数

谁应该学习"旧"系统?

我参与了几个项目,主要涉及用"新"系统替换"旧"系统.不变的是,模式一直是建立"新"系统的团队中几乎没有人对"旧"系统有任何真正的了解.每当我对此提出质疑时,我都被告知这是有目的的......通过不了解"旧"系统,团队能够以不同的方式思考,而不受那里事情的限制.因此,团队中通常只有1或2个人对"旧"系统有所了解,每当有关"旧"系统如何做某事的问题时,他们都会被咨询.

但似乎总会发生的事情是,在"新"系统交付之后,用户总是会对新系统中的"我们如何做X(在旧系统中很容易)"这一形式提出疑问?对于开发人员来说,这通常是他们第一次听说X.所以他们必须去研究X是什么,他们回馈给用户的答案往往是"你不能"或"你可以,但它是真的很尴尬".

这对我来说似乎不对......在我看来,通过让"新"系统的每个开发人员真正了解"旧"系统可以获得很多,而这并不一定会扼杀他们的创造力,如果他们拥有不错的设计和开发技能.

对哪种方法最好的想法?

architecture migration legacy

9
推荐指数
2
解决办法
275
查看次数