问题标签 [brownfield]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
.net - 开始一份专注于棕地应用程序重构和敏捷的新工作
我星期一要开始一份新工作。该公司有一个本土企业案例管理应用程序,用ASP.NET/VB.NET
. 他们正在尝试实施敏捷开发过程。他们甚至让两个人获得了 Scrum Master 认证并聘请了一名敏捷教练。他们目前专注于 6-9 个月的重构。
我的问题是,在这种环境下,有哪些好的方法/工具可以让我熟悉代码库并在我一落地就提高生产力?有什么建议吗?
sql-server - SQL Server 2000/2005 中棕地数据库开发的最佳方法
我最近接手了一个需要帮助的 SQL Server 2000 数据库的开发。我们计划很快将其升级到 SQL Server 2005。这个数据库在表上没有审计字段(CreatedBy、CreatedDate 等),没有外键,整体设计很糟糕。有六个程序使用内联 SQL 和其他旧/坏做法直接访问数据库。
我想清理架构和数据访问。你对一个好的起点有什么建议吗?这是一个生产数据库,它必须在改进的同时继续工作。
ruby-on-rails - 考虑使用现有数据(不是数据库,实际数据)的新 Rails 应用程序——最好的方法是什么?
我的任务是为我目前的工作开发一个新的零售电子商务店面,我正在考虑使用 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 开发人员,所以如果我离开公司,我基本上会把他们当作人质来更新/修改) . 我真的不确定如何进行的最佳途径。
brownfield - 了解开发人员如何处理棕地项目
我是第一次为我的替代人做一些工作面试。我想知道他们将如何处理棕地项目,但我不确定如何表达这个问题。
我想知道他们的态度是什么:例如抛弃并重写,使用工具重构,逐步阅读代码并了解他们读过哪些书(例如“有效地使用遗留代码”)。
您如何了解某人如何进行棕地软件开发?
unit-testing - 考虑到增强和重构业务关键应用程序的任务,对开发人员有什么建议吗?
最近,我在工作中继承了一个业务关键项目以“增强”。在过去的五年中,该代码已被开发并通过了许多人的手。不再在公司工作的顾问和全职员工扼杀了这个非常微妙和过于敏感的应用程序。我们大多数人都必须处理遗留代码或此类项目......这是作为开发人员的一部分......但是......
有零单元和零系统测试。逻辑在存储过程、视图(是的,我说的是视图)和代码之间相互混合(有时无缘无故地重复)。文档?是的,对。我害怕。是的,即使是最小的“调整”或重构也是非常神圣的。一个小事故,我的雇主就会遭受重大的收入损失和潜在的法律问题。
那么,有什么建议吗?我的第一个想法是开始针对现有代码编写断言/单元测试。然而,这只能到此为止,因为存储过程中嵌入了很多逻辑。(我知道它可以测试存储过程,但从历史上看,它比单元测试源代码逻辑要困难得多)。另一种或附加的方法是比较应用程序执行功能之前和之后的数据库状态,进行一些代码更改,然后进行数据库状态比较。
asp.net - Useful/Realistic code coverage goals for a brownfield ASP.NET application
Let me qualify this question. I'm working on a "classic" ASP.NET application (Web Forms) that doesn't use Model-View-Presenter and was not written using TDD. It's also using an antiquated data access strategy (hand written DAO layer that invokes stored procs to populate and persist objects) that is unlikely to be upgraded to an ORM despite my strong desire to do so.
Since I took over development of the application, most new features have been implemented using TDD. That still leaves the old code base, DAL layer and entire UI as untested. Before I figure out how far away the application is from that mystical 70% code coverage goal, I'd like to get clarity around what kind of code is typically included when determining code coverage.
Business logic code is clearly included, but how about WebForms code? Additionally, how about data access code? As mentioned above, our data access layer uses stored procedures to populate object graphs and persist them back to a DB. Is object persistence and re-hydration something that should be included?
I apologize if this question is too open ended, I just feel a little overwhelmed and confused about how to get this brownfield application in better shape.
Thanks!
nhibernate - 使用错误的(棕地)数据库模式映射一对一关系
我必须在 NHibernate 中对这种关系进行建模(稍微简化代码以保持主题) - 员工可以是帐户经理(因此,它是可选的):
表 Employee (Id, Number, Name) 表 EmployeeIsAccountManager (Number, MaxAllowedDiscount)
我没有在 EmployeeIsAccountManager 表中有一个 Id 外键指向表 Employee,而是在 Employee 表中有一个 Number 列,它指向 EmployeeIsAccountManager 表中的 Number 列。
我如何在 NHibernate 中映射它?我尝试在 EmployeeIsAccountManager 类映射上使用外部生成器,但如果我使用 Number 作为外部生成值,它会映射到 Employee 的 ID,它是 Id 而不是 Number。我为我的班级建模以使用组合:
我已经尝试了很多(一对一、多对一、外国生成器),但我不知道这是否可以用 NHibernate 完成。顺便说一句:我可以更改类、映射等,但我不能更改表结构,因为它是棕地状态(旧应用程序有 2+ 百万行代码,近 1000 个表格)。
任何帮助表示赞赏,谢谢!泰德
nhibernate - 使用 NHibernate 转换遗留值
我们有一些带有遗留模式的旧表,我们发现它们很难使用。
是否可以使用 NHibernate 将其中一些数据转换为更好的模型?
例如,我们可能有一个整数状态列,我们希望将其分解为几个属性。
我们希望有类似的东西:
(Status
枚举在哪里)
我知道我们可以使用一个protected
可以获取状态的字段,然后定义额外属性的 getter 以根据支持字段返回适当的值,但我很确定这将禁用基于这些查询的能力特性。
但是,通过这种方式,我们将无法进行诸如查询之类的查询.Query(p => p.IsActive)
并将其转换为诸如 SQL 之类的查询where status = 0
,对吗?
是通过定制的唯一途径IUserTypes
吗?如果是这样,是否有任何帮助框架可以使使用IUserType
更容易以实现这一目标?
其他人如何处理这个问题?
asp.net - 如何将棕地应用程序转换为使用基于用户的时区?
我负责提出在棕地应用程序中实现用户特定时区的解决方案。存储在数据库中的每个日期都存储在服务器的本地时间中。这些日期没有存储时区或偏移信息。
这是一个非常大的应用程序,所以我意识到这将是很多工作。我担心的是,我们这样做的风险尽可能小。有没有人这样做过?如果是这样,最好的方法是什么,要避免哪些陷阱?
当前的想法是,我们将日期列中具有有意义的时间分量的所有数据转换为 UTC。然后,在表示层中,我们需要运行一个函数,将日期时间对象从 UTC 转换为我们需要向用户显示时的用户时区。
它是一个带有 SQL Server 2008 数据库的 ASP .NET 应用程序。我之所以提到这一点,是因为这些技术中可能有一些我不知道的有用工具,我们可以使用它们来帮助事情变得更顺利。
sql - How do I convert old data constraints in-order to de-duplicate data while keeping referential integrity
PreNote: aka washing of hands; this is work being done on a Brownfield Project
I have a "ProductLine" table as follows
The current system has a table of Product Template lines, that creates a set of product lines each time a new reseller is created, linked to that reseller. The idea being that if that Reseller wished to edit the product for their organisation it would be displayed based on their account.
These product lines are used on the sale line table which is linked to a sale table(which is linked to the cart table).
There are a couple of tables hooked up to the product lines for various reasons.
What I was looking at doing was making a de-duped copy of the product lines and dropping some of the data so a new line would only be created IF the reseller made a change; thus reducing the page from > 124,000 rows down to 69 (no ones used the functionality in 5 years).
Then using the old ProductLine table as a reference, altering the existing data (ProductLineId's in the sale line table) to point to the new ProductLineID, by reading the original lines ProductID and finding the new matching LineID (one per product funnily enough).
I was wondering what the best way to do this would be; a cursor springs to mind but tends to bring out DBA's from far and wide with a pitchfork, and I'll probably need to do a similar query on several tables so the less painful the SQL the better.
Just to make the visualisation a little easier the sale line is like this
Extra
I plan to rename the old ProductLine table to LegacyProductLine. Then dedupe + insert the product lines from there into a clean ProductLineTable.
I then need to replace the ProductLineId's in the SalesLine (and others) with the new ProductLineId.
The LegacyProductLine wont know what the ProductLineID is in the ProductLineTable; hence I was looking at the ProductID as a way of matching them up as there is no other matching parameters.
The legacy table is temporary only, for reference, and will be deleted. I need to change the ProductLineID in the SaleLine Table.
The SaleLine Table currently contains the ProductLineId's from the Legacy Table; These need updating to use the ProductLineId's in the ProductLine table.