上午骑车上班的途中不只不觉又想到了“业务重要还是技术重要”这个问题。在思考的过程中不知怎的将其联想到了工厂方法模式。特分析如下:
“客户“这个对象相当于是一个调用的客户端,“公司“对象在这里就是一个工厂,由它向客户端返回“程序员”这个接口的具体实现类“程序员A”或者“程序员B”。如下图所示:
由图中可以分析得出:客户对象不会直接依赖于程序员A或B这样的具体对象,而只会依赖于程序员接口。因为它关注的是code这个编程方法。而具体的程序员只会由公司对象在程序运行时(对应此处为项目开始时)生成。 所以,对具体的程序员形成调用和依赖关系的只能是公司对象而不是客户对象。
对于业务和技术的结合问题一般会有以下两种做法。
做法一:
此种做法使用了专门的业务员这样一个接口,从而让程序员和具体的业务分析方法解藕。对于编码和分析业务相结合的问题通过在公司对象中提供管理方法(上图的manage方法)来实现,当然具体的实现有可能是方法拦截或者类似模板方法什么的办法不一而足。这就类似于给程序员进行专门的业务培训,而不是让他只在编程的时候再一个需求一个需求的问,在不断犯错和修改的循环中去“精通业务”。
做法二:
在公司对象中不提供管理方法(管理很糟的公司一般如此),也没有一个专门的业务员接口及其实现类。至于具体的业务问题的解决只能是完全委托给程序员对象的code方法去执行,也就是在编码的过程中去实现“分析业务”方法。当然这种做法就只能是在犯错和改正的循环中去完成业务的功能。这种做法也就好比是在业务逻辑代码中同时加入了数据库访问代码、事务处理代码、日志记录代码等等。 很显然这种做法在编程理论和方法日趋完善的今天已经是被广泛的放弃并被认为是错误的和不当的!这也是IT解的共识。这种错误也只有一个刚开始学习编程的新手程序员才会去犯。
通过以上两种方法的分析很对比,孰优孰劣就很明显了。而我们需要从中得出的结论就是对于一个程序员来说它的核心价值就是它的编程方法而不是其他业务什么的。如果你不这样认为,你认为业务比技术更重要从而将主要的时间和精力花在了业务的”精通“上,那就势必造成你在同等情况下花在技术上的时间减少。那么同样的情况下你就比相对在技术上花主要精力的程序员在技术上相对落后。当有一天你面对更好的机会需要再次择业时(不能保证正好是同样的行业)你的竞争力就会比那个程序员更差。原因如下:
1,你精通的是“具体的业务”而不是精通“灵活的很快的调用和掌握业务”的这种能力;
2,你在技术上又比别人差;
3,你采用这种方法作事情难免让公司领导因为你的“敬业”和“认真”而对你产生技术上的宽容和具体做事犯错的
默认(因为他们没有提供业务培训,而你又这么主动的学习业务)。这样更加深了你继续这样做下去成为业务的精通者的想法。
总之,一个“管理架构”设计良好能够持续良性发展的公司会按照规范的做法和专业的思想来完成具体的事情而不是过多的寄希望于一两个业务高手或技术高手的个人能力。这就好比良好的软件架构设计不会让一个类去完成太多的任务,也不会在一个方法中去作太多的事情。当然,话说回来,你可能会说我们现在就是一个才起步的小公司不可能按照你说的这种做法来做,因为我们要生存。对于这种情况我并没有否定你的这种做法。
我只是在这里提醒那些程序员朋友们:当你因为生活所迫的原因这样作是没有办法的。但是在这样作的同时,你一定要记住当你的管理者在向你灌输类似于“业务重要性大于技术”或者“某某大公司也是靠这种牛人撑起来的”从而希望你内心深处认为这种做法是“正确的”是”潮流所趋“的时候 ,你在内心深处一定要明白世界其实本非必然就是这个样子的。你的管理者要么就是“井底之蛙”真的不明白这个道理,要么就是为了公司的利益故意对你进行误导。你所要作的就是搞清楚身份和“对象”,用面向对象的思维来说就是要分清楚“程序员”对象和“公司”对象是有区别的。他们具有的”方法“(职能)是不一样的,这就好比资本家毕竟不是无产阶级,无产阶级不是资本家。各位看到这里可能会骂我:“员工要爱企业,要有主人翁精神!你这样是鼓吹个人主义!”。是的,员工是应该有这种精神但是这个问题又是另外一个范畴是属于道德的范畴,员工搞清楚自己的职能并不见得非要用道德的问题来上岗上线评价他。而且安心本职工作,一头钻研技术的员工对公司来讲也未必一定是一件坏事。相反,这正好是很多公司需要的人才。
为了生存,你可以暂时虚应它,可以装作认同并“崇拜”它。但是你的内心深处一定不能真的就去认同这种错误的落后的观念,以至于当真的有一个更好的机会摆在你的面前的时候因为这种观念的原因而错过!那才是程序员尤其是才参加工作很容易被误导的程序员真正的悲哀!!
分享到:
相关推荐
在给出的文件`DAODesign`中,可能包含了关于如何在实际项目中应用工厂模式和DAO模式的示例代码或者分析文章,可以进一步学习理解这两种模式的结合使用。通过深入理解和实践这两种模式,能够提升我们的编程技巧,使...
MVC模式使得用户界面与数据逻辑分离,单例模式保证关键资源的唯一访问点,代理模式在访问对象前后增加额外的功能,工厂模式将对象创建与使用分离,简单工厂模式为对象创建提供一个简单便捷的接口。通过这些模式,...
本文将深入探讨“工厂模式”、“反射模式”,并结合“登陆”、“查询”及“简单分页”的应用场景,帮助你理解如何在实际项目中运用这些技术。 首先,让我们来看“工厂模式”。工厂模式是一种创建型设计模式,它提供...
互联网技术的发展使得会计业务的处理更加高效和精确,尤其是在大数据和云计算的支持下,工厂型代理记账实现了代理记账流程的标准化、自动化和智能化。 首先,传统代理记账模式存在诸多不足,如家庭作坊式代理记账的...
三层架构和工厂模式是软件开发中的两种重要设计思想,尤其在ASP.NET开发中,它们被广泛应用以构建高效、可维护的Web应用程序。 首先,我们来深入理解“三层结构”。三层架构是一种将应用逻辑拆分为三个独立层的软件...
### Spring框架的设计理念与设计模式分析 #### Spring框架的核心组件及其作用 Spring框架以其轻量级、可扩展性以及灵活性闻名于世,是现代Java应用开发的重要基石之一。本篇文章旨在深入探讨Spring框架的设计理念...
### Spring框架的设计理念与设计模式分析 #### 一、Spring框架概述 Spring作为一个顶级的Java开发框架,其设计理念和架构模式对于理解和应用该框架至关重要。本文将深入探讨Spring框架的核心设计理念,以及它如何...
### Spring框架的设计理念和设计模式分析 #### 一、Spring框架概述 Spring框架自问世以来,因其灵活性、可扩展性和强大的社区支持而迅速成为企业级Java应用开发的标准框架之一。Spring框架的核心价值在于其轻量级...
系统分析师在信息技术领域扮演着至关重要的角色,他们负责理解业务需求,设计并实施有效的信息系统解决方案。这份指南详细介绍了这一过程中的关键技术和方法。 首先,系统分析师的角色与职责是本书的重点之一。系统...
网易公司作为中国电子商务行业中的重要参与者,其电商业务的发展历程和模式具有代表性和借鉴意义。以下是对网易公司电商业务的详细分析,包括其电商业务的概述、成功原因、面临的问题以及解决对策。 网易公司电商...
随着技术的不断进步和社会经济的发展,数字化工厂将会发挥越来越重要的作用。未来的企业将更加依赖于智能化的生产模式,以应对市场的快速变化和持续增长的竞争压力。同时,数字化工厂也将成为推动整个制造业转型升级...
联合工厂模式是远大住工(02163.HK)为顺应建筑工程行业发展趋势,实现快速扩张和效益提升而采用的一种创新业务模式。该模式的基本思想是由公司出资筹建工厂,合作方则负责销售,并根据双方股权比例分享经营成果。...
在Java编程领域,"反射"、"工厂模式"和"MyBatis"是三个重要的概念,它们在构建高效、灵活和可扩展的系统中扮演着关键角色。本项目"反射优化工厂模式的mybatis工程"结合了这三个核心知识点,旨在提供一个实际的应用...
总结来说,"C# Winform抽象工厂架构"是一个展示了如何在Winform应用程序中使用抽象工厂模式和反射技术来实现灵活的报表查询系统的案例。通过这种方式,开发者可以构建出易于扩展和维护的多层架构应用,满足不同报表...
智能工厂是现代制造业的重要发展方向,它基于先进的信息技术、自动化技术和人工智能技术,构建智能化生产系统和网络化分布生产设施,旨在实现生产过程的全面智能化。智能工厂能够自主采集、分析、判断和规划,并通过...
5. **后台技术处理**:智能工厂的后台技术包括超级云计算平台、业务协同、海量数据存储与处理、数据智能分析、终端适配、安全与监控等。这些技术确保了工厂系统的稳定运行、数据的安全存储、高效的决策支持和跨系统...
设计模式分为三大类:创建型模式(如单例、工厂方法和抽象工厂),结构型模式(如装饰器、适配器和代理)和行为型模式(如策略、观察者和迭代器)。这些模式通过提供一种标准化的方法来处理常见的设计挑战,使得代码...
例如,工厂模式用于创建对象,装饰者模式用于动态地添加职责,观察者模式用于对象间的事件通知。理解并应用这些模式可以提高软件的可维护性和扩展性。 **3. 基于对象的分析** 在UML中,对象分析是需求理解的关键...
总结起来,业务流程再造方法论是现代企业在面对不断变化的市场和技术环境时,寻求竞争优势和持续改进的重要工具。它要求企业从战略层面出发,重新审视和设计其核心流程,以适应“3C”时代的挑战,确保企业的生存和...
4. **设计模式**:学习经典的软件设计模式,如工厂模式、单例模式、观察者模式等,及其在实际项目中的应用。 5. **数据库设计**:包括关系数据库的基本概念、ER模型、范式理论以及SQL语言的应用。 6. **接口设计和...