在各种咨询项目中,我最近注意到同样的事情不断重复:集群代码。我这么说是什么意思?好吧,让我这样说。当你编码时,你应该考虑干净的代码。是的,我知道,又有一个人在谈论干净的代码。你为什么要听我的?从 12 岁起,我就对计算机及其工作原理感兴趣。当我 15 岁时,我开始观看 Pluralsight,这是一堆关于如何进行 MVVM、MVC、架构等的视频。我看了很多视频,但我还不知道如何编程。我跟着做了,但我记得很多事情都不明白。
在过去的几年里,我一直在多家公司担任架构师和高级软件开发人员。我的背景是计算机工程和 IT 学徒。正如你们所知,我试图与你们分享我所知道的事情,以帮助人们,同时也像 LinkedIn 上的所有人一样获得曝光。是的,他们并不像你想象的那么热爱写作;这纯粹是一种商业模式。但这并不重要,对吧?所以就这样了。希望有一天您会购买我的一款产品。 ;)
现在,让我告诉你我最近在不同项目中看到的情况。我认为干净的代码并不总是被应用的原因并不一定是因为人们不具备相关知识。这通常与严格的期限和来自不同项目的压力有关。如果您是像我一样的软件工程师或项目经理,您就会知道项目的成功需要一定的限制和时间压力。
为了交付给客户,即使在内部工作,您也会面临截止日期和不同的利益相关者。公司通常采用订阅模式运营,客户定期期待新功能。这带来了很多挑战。开发人员和项目规划者需要让项目继续前进,而不要陷入架构债务的陷阱,因为他们没有足够的时间来正确思考解决方案。
一旦出现问题,就很难回头解决它。根据我的经验,人们不会经常回去重构他们的项目——至少我认识的人不会。如果您有不同,请告诉我。你可以做很多事情来重构,这很有帮助,但问题是它没有优先考虑。如果代码可以工作并且客户满意,那么重构就不是首要任务。但让我们想想未来两三年。一旦代码变得越来越集群会发生什么?
你最终可能会雇佣很多开发人员将单体架构改造成微服务架构,这会花费很多钱。这就是为什么你应该考虑干净的代码——不仅仅是当你开始一个项目时,不仅仅是当你醒来时,而是一直如此。因为如果你不应用它,最终它会回来咬你。
整洁代码的实用策略
一致的代码审查
定期代码审查可确保遵守编码标准并及早发现潜在问题。
自动化测试
实施自动化测试,包括单元测试、集成测试和端到端测试,有助于在问题投入生产之前发现问题。
定期重构
在项目计划中留出时间专门用于重构,以防止技术债务累积并保持代码库的可维护性。
采用坚实的原则
SOLID 原则(单一职责、开闭式、里氏替换、接口隔离和依赖倒置)为编写干净且可维护的代码提供了一个框架。
清晰的文档
编写清晰简洁的文档可以帮助新开发人员更快地理解代码库并减少引入错误的可能性。
结对编程
结对编程允许两个开发人员一起处理相同的代码,尽早发现错误并在团队成员之间共享知识。
干净代码的长期好处
降低维护成本
干净的代码更容易维护,减少修复错误和实现新功能所花费的时间和金钱。
增强可读性和可理解性
干净的代码库更容易阅读和理解,对于新开发人员的入职和项目的长期可持续性至关重要。
性能提升
结构良好的代码可以避免不必要的复杂性并优化资源使用,从而带来更好的性能。
更高的可扩展性
干净的代码可以更轻松地扩展应用程序,简化添加新功能和适应不断变化的需求的过程。
提高开发者满意度
使用干净的代码可以减少开发人员的挫败感并提高工作满意度,从而提高生产力并降低流动率。
乱码示例
<?php class User extends security\Session { protected $app; public function __construct($app) { $this->app = $app; } public function addSkill(Application $app, Request $request) { $userInput['id'] = $request->request->get('id', null); $userInput['id'] = preg_replace("/[^0-9,.]/", "", $userInput['id']); $app['checkpoint']->minimumRole(1); $user = $app['session']->get('user', []); $userId = $user['profile']['easyJobAddressId']; if ($userInput['id'] === null) { return $app->json(['ok' => true]); } $app['dbs']['appMySql']->insert('skills', [ 'skillId' => $userInput['id'], 'userId' => $userId, 'rank' => 0 ]); return $app->json(['ok' => true]); } }
重构代码
重构后的代码通过分解职责、使用依赖注入并遵循 SOLID 原则来遵守干净代码原则。
依赖注入和构造函数
public function __construct( UserRoleService $userRoleService, RequestStack $requestStack, UserRepository $userRepository, EasyJobServiceInterface $easyJobService, SkillsRepository $skillsRepository, AppDataService $appDataService ) { $this->userRoleService = $userRoleService; $this->requestStack = $requestStack; $this->userRepository = $userRepository; $this->easyJobService = $easyJobService; $this->skillsRepository = $skillsRepository; $this->appDataService = $appDataService; }
通过注入依赖项,我们确保每个类都有单一的职责,并且可以轻松测试和维护。
添加技能的单一职责
#[Route('/profile/experience/add', name: 'profile_experience_add', methods: ['POST'])] public function addExperience(Request $request): JsonResponse { $this->denyAccessUnlessGranted('ROLE_USER'); $skillId = $request->request->get('id'); if (!is_numeric($skillId)) { return $this->json(['status' => 'error', 'message' => 'Invalid skill ID']); } $userId = $this->getUser()->getId(); $result = $this->appDataService->addSkillToUser($userId, (int) $skillId); return $this->json(['status' => 'ok', 'added' => $result]); }
这里,我们使用专门的方法来处理技能的添加。它确保验证并遵循干净、简洁的结构。
关注点分离
public function index(): Response { $user = $this->getUser(); $userId = $user->getId(); $allSkills = [90, 10, 11, 12, 13, 20, 21, 22, 23, 30, 31]; $skills = array_fill_keys($allSkills, 0); $userSkills = $this->appDataService->getSkillsByUserId($userId); foreach ($userSkills as $skill) { $skillId = $skill->getSkillId(); if (array_key_exists($skillId, $skills)) { $skills[$skillId] = 1; } } }
注意我们如何使用appDataService来解耦系统。
通过分离关注点,我们使每个方法专注于单个任务,使代码更易于阅读和维护。
结论
总之,始终考虑干净的代码。现在看起来可能并不紧急,但忽视它可能会导致严重的问题。优先考虑干净的代码将在未来节省时间、金钱和麻烦。定期重构并遵守编码标准是维护健康代码库的关键。请记住,您今天为编写干净代码所付出的努力从长远来看将会得到回报,使您的项目更具可扩展性、可维护性并且工作起来更加愉快。
以上是为什么干净的代码很重要的详细内容。更多信息请关注PHP中文网其他相关文章!