稳定老旧代码库
修复缺陷、更新依赖项,让一个正常运行的系统保持可靠,同时不因不必要的重写而引入新的风险。
不少迪拜企业迪拜聘请 Microsoft .NET 开发工程师,并不是为了做新东西,而是为了照看一些老系统:一款 Windows 桌面工具、一套内部业务系统,或一个多年前基于 .NET Framework 搭建的网站,它仍在正常运行、完成着自己的职责,但周围的库、托管方案和安全要求,正越来越多地是为更新的运行时而设计的。本页专门针对这种情况撰写,而不是面向全新开发的项目。
.NET Framework 是更早期、仅支持 Windows 的运行时,有别于现代 .NET,后者是微软目前每年发布、持续积极开发的跨平台版本线。Framework 依然能运行,微软也没有宣布将其从 Windows 中彻底移除,但它不再获得新能力,这就留下了两个诚实的选项:谨慎维护现有系统,或规划一次向现代 .NET 的迁移。一位胜任这一角色的开发工程师应该两者皆能胜任,并能直接告诉您,您的系统实际上更需要哪一种。
这一角色涵盖的内容
两项相互关联的工作,而不是一个笼统的开发工程师角色。
修复缺陷、更新依赖项,让一个正常运行的系统保持可靠,同时不因不必要的重写而引入新的风险。
在提出方案之前,先审查应用实际依赖了什么,包括 Windows 专有的 API。
将应用或其中一个组件迁移到当前的 .NET 版本,并处理迁移过程中出现的破坏性变更。
为某个只存在于 .NET Framework、在现代 .NET 中没有直接对应方案的功能,找到一种现代替代方案。
即便系统仍停留在 Framework 上,也让老系统的依赖项保持足够新,从而修补已知漏洞。
让迁移后的应用具备在容器或 Azure 中运行的条件,而这是 .NET Framework 应用通常无法原生做到的。
值得关注的技能
面对老代码的经验,而不只是对新框架的了解。
以下是专门为处理遗留系统工作,委托候选人前值得核查的几行内容。
| 技能或工具 | 合格的表现 | 为何重要 |
|---|---|---|
| .NET Framework 熟练度 | 真正能自如阅读并安全修改一个老旧代码库,而不只是熟悉现代 .NET | 遗留代码有着不同的编写习惯,对此不熟悉容易造成意外破坏 |
| 迁移评估能力 | 能识别出无法直接照搬过去的 Windows 专有依赖和第三方库 | 事前诚实的评估能避免迁移进行到一半就卡住 |
| 对当前 .NET 版本的了解 | 清楚哪个版本属于长期支持,哪个版本即将到达支持结束日期 | 在一个即将失去支持的版本上开展新工作,只会重现您正试图解决的同一个问题 |
| 对老系统做测试 | 在修改现有行为之前,先围绕它编写测试,尤其是在目前完全没有测试的地方 | 没有测试覆盖的遗留代码很容易被以不易察觉的方式破坏 |
| 关于范围的判断力 | 愿意坦率地说,对某个系统而言,完整重写并不值得 | 并非每个遗留应用都需要迁移,一位好的开发工程师会在属实的情况下如实说出来 |
Microsoft 官方的 升级 .NET 应用指南 根据现有应用实际依赖的内容,列出了多条升级路径,值得在与任何开发工程师确定工作范围之前先阅读一遍。
合作方式
限定范围项目很适合这类工作的大部分场景:一次评估、一次迁移,或一项界定明确的稳定化工作,完成后连同文档一并交接。专属开发工程师适合需要持续维护、而不是一次性工作的系统。招聘支持服务适合希望直接聘用一名 Microsoft .NET 开发工程师的企业,我们会协助撰写职位描述并执行技术评估。咨询服务适合尚不确定该维护、迁移还是替换某个系统,希望在投入预算前获得独立意见的企业。
候选人评估
专门针对遗留系统判断力的考察方式。
您可以直接使用这些考察方式,或者在通过招聘支持服务在迪拜聘请 Microsoft .NET 开发工程师时,请我们代为执行。
出过什么问题、他们改动了什么,以及在此过程中他们是如何避免破坏其他部分的。
能够现场指出您技术栈中某个 Windows 专有依赖或已被废弃库的候选人,展现的是真实经验,而不是排练好的答案。
给出一个老旧组件的简短描述,问他们在推荐重写还是小规模修复之前会检查什么。
一个无论面对什么系统都建议彻底重写的候选人,和一个从不建议重写的候选人一样,都是一个值得警惕的信号。
具体问问他们在修改没有现成测试的代码之前,是如何为其建立安全保障的。
认证
目前没有专门针对 .NET Framework 维护的 Microsoft 认证。
在您为了找到这样一项认证而四处寻找之前,值得先知道它其实并不存在。
Microsoft 的认证目录目前没有专门针对 .NET Framework 维护或迁移的证书,因此应把这项能力当作需要通过真实案例核实的技能,而不是索取一枚徽章。
对 Microsoft 官方迁移文档的实际掌握,加上一份开发工程师维护过或推进过的真实遗留系统作品集,在这里比任何证书都更能说明问题。
阿联酋相关事项
遗留系统和阿联酋规则真正交汇的地方。
如果系统已经涉及真实客户数据,请在动工之前,把以下两点都提出来。
一个仍保存客户或员工记录的老旧 .NET Framework 应用,受 2021 年第 45 号联邦法令的约束,与一个全新系统完全一致,而一个过时的依赖项,正是这类系统常见的合规短板来源。
由于 Microsoft 在阿联酋境内运营 Azure 区域,脱离 .NET Framework 的迁移往往也正是企业第一次把系统迁入境内的契机,而不必把这两项决定分开对待。
无论您通过哪种方式在迪拜聘请 Microsoft .NET 开发工程师,本页都属于我们的 Microsoft 与 Dynamics 365 分类,是更广泛的 迪拜聘请开发工程师 部分的一员。一旦系统真正在现代 .NET 上完成重建,我们的 ASP.NET 开发工程师 页面涵盖基于当前框架的持续网站开发工作,而我们的 C# 开发工程师 页面则专门介绍这门语言本身,不局限于 .NET Framework。如果目标是 Azure,我们的 Azure 开发工程师 页面可以从那里接续,如果云端方向尚未确定,我们通用的 云服务 页面是一个合理的起点。
直接解答
.NET Framework 是更早期、仅支持 Windows 的运行时,多年来一直随 Windows 一同发布。现代 .NET,也就是微软目前每年发布的当前版本线,是跨平台且持续积极开发的,而 .NET Framework 不再获得新功能。阿联酋仍有不少企业软件运行在较旧的版本上。
Framework 本身与其所依附的 Windows 版本绑定,并没有被彻底淘汰,但它不再获得新能力,而周边的许多库都已经转向别处。真正的风险通常出在某个依赖项、托管平台或安全要求已经不再适配,这一点 .NET 开发工程师可以直接评估。
不一定。根据 Microsoft 官方指导,升级路径从简单的重新定位目标到更彻底的重新设计都有,具体适合哪条路径取决于您的应用实际依赖了什么。在决定重写之前先做一次妥善评估,是值得花的时间。
可以,这也是常见且稳妥的起点:先稳定和维护现有系统,同时单独规划迁移,而不是在压力下把两件事一起匆忙推进。
几乎总是现代 .NET。Framework 已经多年没有获得新功能,一个新项目没有理由从第一天起就背上这种限制。
在了解应用、其依赖项以及您的优先事项,无论是稳定性、迁移,还是两者兼顾之后,我们会在动工前以书面形式确定工作范围。
资料来源
书面固定价格
已收到,我们正在为您撰写报价。
工作时间内您将在 45 分钟内收到。请查收确认邮件。