最近我在工作中继承了一个"增强"的业务关键项目.在过去五年中,该代码已经过许多人的工作和传递.不再与公司合作的顾问和全职员工已经对这种非常敏感和过于敏感的应用程序进行了抨击.我们大多数人都必须处理遗留代码或这类项目...作为开发人员的一部分......但......
没有单位和零系统测试.逻辑在存储过程,视图(是的,我说过的视图)和代码之间是混杂的(有时无缘无故地重复).文档?是的,对.我害怕.是的,非常神圣,即使是最小的"调整"或重构也是如此.一个小小的不幸事件,我的雇主会有重大的收入损失和潜在的法律问题.
那么,有什么建议吗?我的第一个想法是开始针对现有代码编写断言/单元测试.但是,这只能到目前为止,因为存储过程中嵌入了大量逻辑.(我知道它可以测试存储过程,但是历史上它比单元测试源代码逻辑要困难得多).另一种或另外的方法是在应用程序执行函数之前和之后比较数据库状态,进行一些代码更改,然后进行数据库状态比较.
我必须在NHibernate中建模这种关系(简化代码以保持主题) - 员工可以是一个帐户管理员(因此,它是可选的):
表Employee(Id,Number,Name)表EmployeeIsAccountManager(Number,MaxAllowedDiscount)
表EmployeeIsAccountManager指向表Employee,而不是在Employee表中有一个Number列,它指向表EmployeeIsAccountManager中的Number列.
我如何在NHibernate中映射这个?我已经尝试在EmployeeIsAccountManager类映射上使用外部生成器,但如果我使用Number作为外部生成的值,它将映射到Employee的ID,即Id而不是Number.我模仿我的课程使用作文:
public class Employee
{
public virtual int Id { get; set; }
public virtual short Number {get; set; }
public virtual string Name {get; set; }
public virtual AccountManager AccountManager { get; set; }
}
public class AccountManager
{
public virtual short Number { get; set; } /*needed because of ID only?*/
public virtual decimal MaxAllowedDiscount { get; set }
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试了很多(一对一,多对一,外来生成器),但我无法弄清楚是否可以用NHibernate完成.顺便说一下:我可以改变类,映射等但是我不能改变表结构,因为它的棕色区域状态(旧应用程序有200多万行代码,近1000种形式).
任何帮助表示赞赏,谢谢!摊晒
让我限定这个问题.我正在开发一个"经典"的ASP.NET应用程序(Web窗体),它不使用Model-View-Presenter而且不是使用TDD编写的.它还使用过时的数据访问策略(手写DAO层调用存储过程来填充和持久化对象),尽管我强烈希望这样做,但它不太可能升级到ORM.
自从我接手开发应用程序以来,大多数新功能都是使用TDD实现的.这仍旧旧代码库,DAL层和整个UI未经测试.在我弄清楚应用程序距离神秘的70%代码覆盖率目标有多远之前,我想清楚一下在确定代码覆盖率时通常包含哪种代码.
明确包含业务逻辑代码,但WebForms代码如何?另外,数据访问代码怎么样?如上所述,我们的数据访问层使用存储过程来填充对象图并将它们保存回DB.物体持久性和再水化是否应包括在内?
我很抱歉,如果这个问题太开放,我只是觉得有点不知所措,并且对如何使这个棕色地块应用程序更好地形成一些困惑.
谢谢!
我的任务是为我目前的工作开发一个新的零售电子商务店面,我正在考虑用RoR来解决它A)用我有限的Rails知识建立一个"真正的"项目,以及B)给予管理层快速周转和反馈(他们希望尽快完成这项工作,他们的最后期限是相当不切实际的 - 我说的是几个星期从零开始到工作模式,所以他们可以开始用SEO/SEM推销它,而且我没骗你,"视频博客"因为我的老板听说这是未来的事情".
我们确实有一个数据库结构,但它绝对可怕并且没有押韵也没有理由被抛在一起,所以我将在很大程度上忽略它并从头开始创建一个新的数据库; 但是,我有需要加载到应用程序中的现有数据(就像我说的,它是一个电子商务应用程序,我们有产品数据).我需要将这些数据按到一个可用的格式,因为我们的供应商向我们提供了神秘的,缩写的列名称,并且它高度非规范化,特别是在类别中(我之前发布了一个关于它的问题 - 基本上类别表有六个字段,每个类别/子类别一个,如果该类别不适用,其中一些是空白的).
有两个主要问题让我第二个想法:
正如我所说,数据需要放入"适当的"数据库模式; 我不能只是按原样加载它.我对它的良好数据模型有一些想法,但我的分析还没有完成.最终会有大量的连接表将各种东西链接在一起(例如products_categories,products_attributes,products_prices)等,这些表将链接产品而不是通过ID而是通过它们的SKU(见下文).
一切都已经有了为它生成的ID,但我添加的任何新内容都需要自动生成一个; 我怀疑这对任何成熟的RDBMS都有问题,但我知道Rails喜欢自己生成ID.此外,几乎所有与产品相关的表都由SKU链接(并且在供应商提供的数据中实际上是由前缀和库存号组成的复合键,它们组合构成完整的SKU),而不是ID和I我不确定这是否会成为性能问题(当然,我总是可以在这些列上手动创建索引来加快速度).但这确实意味着我需要脱离Rails约定.
简而言之,我认为就产品上市时间和易于开发而言,Rails可能是一个不错的选择,但是必须使用现有的数据内容可能会变成一种痛苦,因为应用程序需要围绕它开发而不是"传统的"Rails应用程序,这个因素让我对使用Rails产生了重大疑虑.还有一些其他问题(必须设置一个Linux服务器,而且我所居住的区域只有很少的Rails开发人员这样的事实,所以如果我离开公司,我基本上会把他们作为更新/修改的人质) .我真的不确定最好的路径.
我们正在考虑将我们的PHP Webapp转换为不使用框架(这会杀死我们)来使用Zend Framework.由于应用程序的大小我不认为从头开始将是一个可行的管理选项,所以我想开始研究如何慢慢从当前的网站结构转换为使用Zend框架,但没有关于这个过程的很多信息.
到目前为止,我的计划是将当前代码库转储到Zend应用程序的public /目录中,修复了我确定会出现的大量问题,然后开始一次重写一个模块.
过去有没有人有这方面的经验,它是如何为你工作的?