创业之初的技术题 如何构建一个较为通用的业务技术架构
- 格式:docx
- 大小:376.88 KB
- 文档页数:7
初创企业组织架构的设计组织架构是一个企业内部的组织结构和职能分工的体现,对于初创企业来说,一个合理且有效的组织架构设计是至关重要的。
它能够帮助企业明确职责、优化工作流程、提高工作效率,促进企业的快速发展。
本文将详细介绍初创企业组织架构设计的标准格式。
一、引言在引言部分,需要简要介绍初创企业的背景和目标,以及为什么需要进行组织架构设计。
可以提及企业的发展阶段、规模和业务特点等。
二、组织结构图在组织结构图部分,需要绘制一个清晰明了的组织结构图,用于展示企业内部各个部门、岗位和人员之间的关系。
可以使用流程图、树状图或其他适合的图表形式。
组织结构图应包括以下要素:1. 部门:列出企业内部的各个部门,如市场部、研发部、生产部等。
2. 岗位:在每个部门下面列出相应的岗位,如市场部下面可以有市场经理、市场专员等岗位。
3. 人员:在每个岗位下面列出实际担任该岗位的人员。
三、职责和权限在职责和权限部分,需要详细描述每个部门和岗位的职责和权限。
可以按照部门的顺序逐个介绍,也可以按照岗位的顺序逐个介绍。
对于每个部门或岗位,需要明确以下内容:1. 职责:列出该部门或岗位的主要职责和任务,以确保各个部门和岗位的工作内容清晰明确。
2. 权限:说明该部门或岗位在决策、资源分配和人员管理等方面的权限范围,以确保工作的顺利进行。
四、沟通与协作机制在沟通与协作机制部分,需要说明初创企业内部的沟通和协作方式,以促进信息流通和团队合作。
可以包括以下内容:1. 内部沟通:介绍内部沟通的渠道和方式,如会议、邮件、即时通讯工具等。
2. 跨部门协作:说明不同部门之间如何进行协作和合作,如共享资源、协同工作等。
3. 上下级关系:阐述上下级之间的沟通和协作方式,如定期汇报、工作指导等。
五、工作流程与效率优化在工作流程与效率优化部分,需要描述初创企业内部的工作流程和如何优化工作效率。
可以包括以下内容:1. 流程图:绘制工作流程图,清晰展示各个岗位之间的工作流程和衔接关系。
初创企业组织架构的设计一、引言组织架构是初创企业成功运营的重要基础,它涉及到企业内部各个部门的职责划分、权责关系、沟通渠道等方面。
一个合理且适应企业发展阶段的组织架构能够提高内部协作效率,促进信息流通,有助于企业快速成长。
本文将详细介绍初创企业组织架构的设计,包括组织架构的原则、常见的组织架构类型以及设计步骤。
二、组织架构设计的原则1. 简洁性原则:初创企业通常人员规模较小,因此组织架构应该尽量简化,避免过于复杂的层级关系,以提高决策效率和执行效率。
2. 灵便性原则:初创企业处于快速发展阶段,组织架构应具备一定的灵便性,能够适应企业业务的变化和扩张,避免因为组织架构不适应而妨碍企业发展。
3. 透明性原则:组织架构应该清晰明确,每一个岗位的职责和权限都应该明确规定,以避免职责不清、权限不明的问题。
4. 协同性原则:组织架构应该能够促进不同部门之间的协作和沟通,避免信息孤岛和部门之间的壁垒。
三、常见的组织架构类型1. 功能型组织架构:按照企业各个功能部门进行划分,如市场部、销售部、研发部等。
适合于初创企业业务较为简单的情况,能够明确各个部门的职责和权限。
2. 产品型组织架构:按照企业的产品线进行划分,如产品一部、产品二部等。
适合于初创企业产品线较多、业务复杂的情况,能够更好地协调不同产品线之间的工作。
3. 地域型组织架构:按照不同地区进行划分,如华东区、华南区等。
适合于初创企业跨地区经营的情况,能够更好地管理各个地区的业务。
4. 矩阵型组织架构:将功能型和产品型组织架构相结合,形成矩阵型的组织结构。
适合于初创企业业务复杂、需要强调跨部门协作的情况,能够提高信息流通和决策效率。
四、组织架构设计步骤1. 确定业务需求:首先需要明确企业的业务特点和发展方向,了解企业需要哪些部门和岗位来支撑业务的运营。
2. 划分职能和权限:根据业务需求,确定各个部门的职能和权限,明确各个岗位的职责和工作内容。
3. 设计层级关系:根据企业规模和业务复杂程度,设计合理的层级关系,避免层级过多或者过少导致管理难点。
初创企业组织架构的设计一、引言在初创企业的发展过程中,组织架构的设计是至关重要的。
一个合理的组织架构可以匡助企业高效运作,实现目标并提高员工的工作效率。
本文将详细介绍初创企业组织架构的设计,包括组织结构、职能划分和工作流程等方面的内容。
二、组织结构初创企业的组织结构应该灵便、扁平化,并且能够适应企业发展的变化。
以下是一个典型的初创企业组织结构示例:1. 高层管理团队:由创始人和核心管理人员组成,负责制定企业的战略目标和决策。
2. 部门/职能团队:根据企业的业务需求,划分不同的部门或者职能团队,如市场营销团队、研发团队、运营团队等。
3. 项目团队:根据不同的项目需求,设立相应的项目团队,并由项目经理负责管理和协调。
4. 行政支持团队:包括人力资源、财务、行政等职能部门,为企业提供各种行政支持。
三、职能划分在初创企业中,职能划分的合理性对于企业的正常运营至关重要。
以下是一个初创企业常见的职能划分示例:1. 创始人/CEO:负责制定企业的发展战略和目标,并对整个企业负总责。
2. 高级管理人员:包括首席运营官(COO)、首席财务官(CFO)等,负责各自职能领域的管理和决策。
3. 部门经理:负责领导和管理各个部门的运营工作,包括市场营销经理、研发经理、运营经理等。
4. 项目经理:负责项目的规划、执行和管理,确保项目按时完成并达到预期目标。
5. 员工:根据各自的职责和岗位要求,执行具体的工作任务。
四、工作流程一个清晰的工作流程可以匡助初创企业提高工作效率和协同能力。
以下是一个典型的初创企业工作流程示例:1. 制定目标:高层管理团队与部门经理共同制定企业和部门的年度目标,并将其分解为具体的任务和指标。
2. 分配任务:部门经理根据目标和任务的要求,将任务分配给相应的员工或者项目团队,并明确工作的优先级和截止日期。
3. 执行工作:员工按照任务要求,执行具体的工作,并及时反馈工作发展和问题。
4. 协同合作:不同部门和团队之间进行有效的沟通和协作,确保项目的顺利进行和目标的实现。
初创企业组织架构的设计在初创企业的早期阶段,设计一个合理的组织架构对于企业的发展至关重要。
一个良好的组织架构可以匡助企业实现高效的协作和顺畅的沟通,有效地分配资源和责任,提高工作效率。
本文将详细介绍初创企业组织架构设计的步骤和注意事项。
一、确定组织结构类型在设计初创企业的组织架构之前,首先需要确定组织结构的类型。
普通来说,初创企业可以采用以下几种常见的组织结构类型:1. 功能型组织结构:按照工作职能将员工划分为不同的部门,例如市场部、技术部、财务部等。
这种结构适合于初创企业的早期阶段,可以快速响应市场需求,但可能存在沟通不畅和决策滞后的问题。
2. 产品型组织结构:按照产品线划分部门,每一个部门负责一个或者多个产品的开辟和运营。
这种结构适合于产品线较多的初创企业,有利于加强产品的专业化管理,但可能存在资源分散和协作难点的问题。
3. 地域型组织结构:按照地理区域划分部门,每一个部门负责一定地域范围内的业务。
这种结构适合于初创企业在不同地区开展业务的情况,有利于更好地了解当地市场和客户需求,但可能存在资源利用不合理和协调难点的问题。
二、确定关键岗位和职责在初创企业的组织架构中,关键岗位的设定和职责的明确非常重要。
关键岗位通常包括创始人、首席执行官、首席技术官、首席财务官等,他们在企业发展过程中扮演着重要的角色。
确定关键岗位后,需要明确每一个岗位的职责和权限,确保各个职能部门的工作协调一致。
例如,在功能型组织结构中,可以设立市场部、技术部和财务部等职能部门。
市场部负责市场调研、品牌推广和销售策略制定;技术部负责产品研发和技术支持;财务部负责财务管理和投资决策。
每一个部门都应有明确的职责和目标,同时需要与其他部门进行有效的协作。
三、确定团队规模和层级在初创企业的组织架构设计中,需要考虑团队规模和层级的问题。
团队规模应根据企业的业务需求和发展规划来确定,既不能过大导致资源浪费,也不能过小导致工作无法顺利进行。
创业指导如何进行创业项目的组织架构优化在进行创业项目时,组织架构的优化是十分重要的。
一个良好的组织架构可以提高企业的效率、协调各部门间的合作,从而实现项目的顺利发展和成功。
本文将从招聘、部门设置和流程优化三个方面来探讨如何进行创业项目的组织架构优化。
一、招聘在创业项目中,人才是最宝贵的资源。
一个好的团队可以为项目的开展提供有力的保障。
因此,在招聘环节中,我们应该注重以下几点:1.明确人才需求:在进行招聘前,需要明确所需人才的具体岗位和职责,从而有针对性地开展招聘工作。
2.专业能力和团队协作能力并重:团队成员需要具备相关专业能力,能够胜任自己的工作。
同时,他们也需要具备良好的团队协作意识和沟通能力。
3.注重人员的成长与发展:在招聘过程中,可以适当考虑到人员的成长和发展,为团队成员提供培训和晋升机会,激发其工作积极性和创造力。
二、部门设置创业项目的组织架构需要合理的部门设置,以确保工作的高效协同开展。
以下是几个建议:1.项目管理部门:负责项目的整体管理和协调,确保项目的进度和质量。
2.市场营销部门:负责产品的市场调研和推广,寻求市场机会,提高企业知名度和销售额。
3.研发部门:负责产品的研发和技术支持,不断改进产品以适应市场需求。
4.财务部门:负责公司的财务管理和预算,确保项目资金的安全和有效使用。
5.人力资源部门:负责员工的招聘、培训和绩效管理,保持员工的积极性和团队合作能力。
三、流程优化优化公司的流程可以提高工作效率,降低成本,并且有助于团队间的协作与沟通。
以下是一些优化流程的建议:1.流程规范化:将工作流程进行规范化,明确各个岗位之间的工作流程和职责,避免出现重复工作或沟通不畅的情况。
2.信息共享和沟通:建立良好的内部沟通机制,如定期召开团队会议、使用高效的协作工具等,以增加信息共享和团队合作。
3.项目绩效评估:建立合理的绩效评估机制,对项目成员的工作进行评估,并进行激励和奖励,提高整个团队的积极性和工作效率。
初创企业组织架构的设计随着创业浪潮的兴起,越来越多的初创企业面临着如何设计合适的组织架构的问题。
一个合理的组织架构能够匡助企业高效运转,提高工作效率,实现快速发展。
本文将从不同角度探讨初创企业组织架构的设计。
一、确定组织结构类型1.1 功能型结构:按照不同的职能部门进行划分,如市场部、研发部、人力资源部等。
适合于刚刚创立的企业,能够明确各部门的职责,提高工作效率。
1.2 项目型结构:按照项目组织,每一个项目组成一个独立的团队。
适合于需要快速响应市场需求,灵便调整团队的企业。
1.3 矩阵型结构:将功能型结构和项目型结构相结合,既有专业的职能部门,又有项目团队。
适合于需要兼顾专业性和灵便性的企业。
二、确定管理层级2.1 初创企业通常较为扁平化,管理层级不宜设置过多,以便快速决策和执行。
2.2 管理层级应根据企业规模和发展阶段来确定,普通包括总经理、部门经理等。
2.3 管理层应具备丰富的行业经验和管理能力,能够带领团队实现企业目标。
三、建立有效的沟通机制3.1 定期组织全员会议,让员工了解企业的发展方向和目标,增强团队凝结力。
3.2 建立部门间的协作机制,促进信息共享和资源整合,提高工作效率。
3.3 建立上下级之间的沟通渠道,及时解决问题和反馈意见,保持组织的灵便性和快速响应能力。
四、激励员工发挥潜力4.1 制定合理的薪酬体系,激励员工的工作热情和积极性。
4.2 提供员工培训和职业发展机会,让员工感受到企业的关心和支持。
4.3 建立良好的企业文化,营造和谐的工作氛围,让员工愿意为企业付出更多。
五、持续优化和调整组织架构5.1 随着企业规模和业务的发展,不断优化和调整组织架构,适应市场需求和内外环境的变化。
5.2 定期评估和调整各部门的职责和人员配置,确保组织的高效运转。
5.3 倾听员工的意见和建议,不断改进组织架构,提高企业的竞争力和发展潜力。
初创企业组织架构的设计是一个复杂而重要的过程,需要综合考虑企业的规模、发展阶段、行业特点等因素。
初创企业组织架构的设计一、引言初创企业的组织架构设计是确保企业顺利运营和实现目标的关键因素之一。
一个合理的组织架构可以提高工作效率、优化资源配置、促进团队合作,从而增强企业的竞争力和可持续发展能力。
本文将详细介绍初创企业组织架构的设计原则、常用模式以及实施步骤。
二、设计原则1. 简洁性:初创企业组织架构应该尽量简洁明了,避免过多的层级和冗余的职能,以便快速决策和高效执行。
2. 灵便性:组织架构应具备一定的灵便性,能够适应企业发展的变化和需求的调整,避免僵化和局限性。
3. 协作性:组织架构应鼓励团队成员之间的合作与沟通,促进信息流通和知识共享,提高团队整体绩效。
4. 清晰的职责和权限:每一个职位的职责和权限应该明确界定,避免职责不清、权限冲突等问题,确保工作流程的顺畅进行。
5. 适度的层级:组织架构中的层级应该适度,既要保证管理层对下属的有效管理,又要避免层级过多导致信息传递和决策的延迟。
三、常用组织架构模式1. 功能型组织架构:按照不同的职能将员工划分为不同的部门,如市场部、研发部、财务部等。
这种模式适合于初创企业刚开始运营阶段,每一个部门负责特定的职能,有利于专业化管理和工作分工。
2. 产品型组织架构:按照不同的产品线或者业务领域划分部门,如产品A部门、产品B部门等。
这种模式适合于初创企业产品线较多,需要针对不同产品进行专门管理和运营。
3. 地域型组织架构:按照不同地域或者市场划分部门,如华东区部门、华南区部门等。
这种模式适合于初创企业市场覆盖范围较广,需要在不同地域进行专门运营和管理。
4. 矩阵型组织架构:将员工按照职能和项目划分,形成交叉式的管理模式。
这种模式适合于初创企业需要跨部门、跨职能的合作,强调团队协作和信息共享。
四、实施步骤1. 确定组织目标:明确初创企业的发展目标和战略方向,将组织架构设计与企业战略相匹配。
2. 分析工作流程:详细分析企业的工作流程和业务需求,了解各个职能部门之间的关系和协作方式。
初创企业组织架构的设计在初创企业的发展过程中,一个合理的组织架构设计可以帮助企业更好地实现目标和发展。
本文将从不同的角度探讨初创企业组织架构的设计。
一、确定企业目标和愿景1.1 确定明确的企业目标:初创企业应该明确自己的使命和愿景,确定清晰的发展目标,以便为组织架构设计提供方向。
1.2 确定战略重点:根据企业目标,确定关键的战略重点,以便在组织架构设计中有针对性地安排资源和人员。
1.3 确定核心价值观:明确企业的核心价值观,以此为基础建立组织文化和价值体系,引导员工行为。
二、设计合理的组织结构2.1 设立明确的职能部门:初创企业可以根据业务需求设立不同的职能部门,如市场部、研发部、销售部等,以便更好地协调和管理各项工作。
2.2 设立有效的决策层级:确定清晰的决策流程和层级,确保信息畅通、决策迅速,避免出现决策滞后或信息不畅的情况。
2.3 灵活调整组织结构:初创企业应该保持灵活性,根据业务发展情况随时调整组织结构,以适应外部环境和内部需求的变化。
三、建立有效的沟通机制3.1 建立开放透明的沟通氛围:初创企业应该建立开放透明的沟通氛围,鼓励员工之间和部门之间的沟通和合作,促进信息共享和团队合作。
3.2 制定明确的沟通政策:制定明确的沟通政策和流程,确保信息传递准确及时,避免信息传递不畅导致的问题。
3.3 建立多元化的沟通方式:建立多元化的沟通方式,包括会议、邮件、电话等,以满足不同员工和部门的沟通需求。
四、激励和培养人才4.1 设立激励机制:初创企业可以通过薪酬激励、晋升机会等方式激励员工,增强员工的工作积极性和团队凝聚力。
4.2 提供培训机会:为员工提供培训机会,提升员工的专业技能和综合素质,以适应企业发展的需要。
4.3 建立人才储备计划:建立人才储备计划,培养和发展潜力员工,为企业未来的发展提供人才支持。
五、持续优化和改进5.1 定期评估和调整:定期对组织架构进行评估和调整,及时发现问题和不足,持续优化和改进组织结构。
初创企业组织架构的设计在当今竞争激烈的商业环境中,初创企业的组织架构设计是至关重要的。
一个良好的组织架构可以帮助企业实现高效运作,提高团队协作效率,促进业务发展。
本文将探讨初创企业组织架构设计的重要性以及如何设计一个适合初创企业的组织架构。
一、明确企业使命和愿景1.1 确定企业使命和愿景:初创企业应该明确自己的使命和愿景,明确企业的发展方向和目标,为组织架构设计提供明确的指导。
1.2 确定核心价值观:初创企业应该确定自己的核心价值观,建立起一套价值导向的组织文化,以此来吸引和留住优秀员工。
1.3 制定长期发展规划:初创企业应该制定长期发展规划,考虑未来业务扩张和团队规模增长,为组织架构设计提供未来发展方向。
二、建立扁平化管理结构2.1 设立清晰的管理层级:初创企业应该建立简洁清晰的管理层级,避免过多的管理层级导致决策效率低下。
2.2 强调团队合作和沟通:建立开放的工作环境,鼓励员工之间的合作和沟通,促进团队的凝聚力和效率。
2.3 赋予员工更多自主权:初创企业应该赋予员工更多的自主权和决策权,激发员工的创造力和责任感。
三、设立清晰的职责和权责分工3.1 划分明确的岗位职责:初创企业应该为每个岗位设立清晰的职责和目标,避免岗位职责不明确导致工作效率低下。
3.2 建立有效的绩效考核机制:设立科学的绩效考核机制,激励员工积极工作,提高工作效率。
3.3 强调团队协作:初创企业应该强调团队协作,让员工明确自己的职责和在团队中的作用,促进团队的协作和效率。
四、建立灵活的组织结构4.1 及时调整组织结构:初创企业应该灵活调整组织结构,根据业务发展情况和团队规模变化进行及时调整。
4.2 弹性的工作流程:建立灵活的工作流程,让员工更好地适应快速变化的市场环境,提高工作效率。
4.3 鼓励创新和改进:初创企业应该鼓励员工提出创新和改进建议,不断优化组织结构和工作流程,提高企业的竞争力。
五、重视员工培训和发展5.1 提供专业培训机会:初创企业应该为员工提供专业的培训机会,提升员工的专业能力和素质。
创业初期的技术架构重点技术架构在创业初期显得尤为重要,因为这决定着公司在后续发展中的基础和动力。
如果技术架构设计不合理,将会带来无限的麻烦和成本。
因此,在创业初期,团队需要在技术架构的选择上进行适当的权衡,以确保选择合适的技术方案。
1. 云服务选择在创业初期,由于资金和资源有限,团队需要尽可能地降低开支,因此,云服务成为首选。
可根据应用的特点和需求,选择适合的云服务供应商,例如 AWS、阿里云、腾讯云等,在这里需要注意,各家云服务供应商提供的服务和定价方案可能有所不同,需要根据实际情况进行选择。
2. 数据库选择数据是所有互联网应用的核心,因此选择数据库也十分关键。
创业团队需要根据数据量的大小、读写频率以及数据结构等因素,选择合适的数据库。
MySQL、MongoDB和Redis等不同类型的数据库,需要根据实际需求进行选择和部署。
3. 框架选择框架是开发过程中的重要组成部分,能够提高开发效率和质量。
Node.js、Spring、Ruby on Rails等框架都有相应的优劣势,创业团队需要根据应用特点和团队技术水平,选择适合的框架。
4. 版本控制工具选择版本控制工具是开发过程中的必备工具之一,主流的版本控制工具包括Git和SVN等。
Git具有分布式版本控制、速度快等优势,SVN则具有界面友好,操作简单等优点。
因此,需要根据实际情况进行选择。
为了确保技术架构的稳定和安全,团队需要不断进行架构升级和优化,并且要不断学习新技术和发展趋势,保持技术领先性。
同时,创业初期的技术架构设计也需要考虑到未来的发展,以确保能够应对日益增长的应用需求,保证公司长久发展。
在技术架构建设中,还需重视文档的编写和更新,使得架构的设计和使用变得简单和易于理解。
特别是对于团队之外的维护者,需要完善的文档往往能节省大量的解释和交流时间,提升整体效率。
同时,团队还需要保持对技术的持续关注,研究领域内新的技术趋势和应用范例。
尽可能关注业内领袖的博客和社交网络,了解和学习他们的思考方式和行动计划,能够帮助团队提高技术创新的能力。
创业之初的技术题如何构建一个较为通用的业务技术架构经过很长一段时间的实践后摸索出来的业务技术架构,自认为还算通用,而且能够在一定程度上支撑易变的业务。
当然这套架构肯定不是银弹,不可能解决所有业务场景,所以最终还是需要围绕到具体的场景加以借鉴。
作者:吴极来源:码农网|2016-11-10 14:34收藏分享1、通用架构概述创业之初,我们往往会为了快速迭代出产品,而选择最简单的技术架构,比如LAMP架构,SSH三层架构。
这些架构可以适应初期业务的快速发展,但是,随着业务变得越来越复杂,我们会发现这些架构越来越难支撑业务的发展,出现在一个类中写好几千行代码,一个方法中到处都是if else语句,如果中间遇到主程序猿离职,后面介入的程序猿几乎无法理解这些代码,到最后,产品越来越难迭代,只能推翻重做。
如果我们在创业初始就以一种适应性较强的架构去写代码,后面就会少走很多弯路。
下面的文章是我自己总结出来的一套架构,经过实践,适应性还算不错。
2、通用架构实现总的来说我的通用架构还是以三层架构为基础进行演变的,在经典的三层架构中,最上层的是controller,中间是service,下层是dao。
在我的架构中,最上层是网关层,controller只是网关的一种,中间是业务层,service只是业务层的入口,最下层是基础层,dao只是基础层中的数据存储组件。
2.1、网关层网关层本质上是对不同的网络协议的请求进行处理,比如HTTP协议,TCP协议,当然,也可以对其他协议进行处理。
具体见下图:2.1.1、HTTP请求一般来自PC端和APP端的请求都是基于HTTP协议的,对于处理HTTP请求的方案,业内已经非常成熟了。
首先,tomcat 容器本身已经把HTTP请求处理的复杂性封装掉了,其次,spring mvc对请求处理提供了RESTful风格的编码方式,大大降低了开发的复杂度。
我们要做的就是对controller按照业务领域划分,比如按照订单、会员去划分大的领域,里面的各种方法就是这个领域内的操作。
这里的controller就是统一网关处理层,对于每个controller的方法只做三件事,第一,将请求参数解析出来并组装成内部参数,第二调用下层服务执行业务逻辑,第三组装返回结果,对于异常情况,需要记录异常堆栈日志并转换错误码,堆栈信息不要暴露到调用方。
2.1.2、TCP请求对于处理TCP请求的方案,业内也已经很成熟了,比如Netty。
但是,TCP请求毕竟太底层,我们往往会基于TCP协议去开发自己的协议。
另外,很多分布式框架都是基于TCP协议的,比如RPC框架Dubbo,消息框架RocketMQ等等。
从单机系统到分布式系统,无非就是网关层多了处理TCP请求的逻辑,理论上底层的业务是无需感知自己到底是出于单机环境还是分布式环境,网关层的作用就是要屏蔽这种不同外部调用源的细节。
在Dubbo服务端中,我们需要实现远程接口,并对远程服务调用进行内部的转发,转发的逻辑也很简单,首先是解析参数并组装内部参数,然后调用业务层的接口执行业务逻辑,最后组装返回结果,对于异常处理也需要在这里做掉,防止异常暴露给外部应用。
2.1.3、小结网关层本质是对协议进行处理,同时将业务逻辑收敛到网关层,而不是暴露给外部,当内部业务逻辑进行重构的时候,外部调用方就不需要感知这些变化,当外部调用源增加时,内部业务逻辑不需要感知这种变化,从而将外部调用方和内部业务逻辑进行了解耦。
2.2、业务层业务层是一个系统,无论是单机系统还是分布式系统群中的某个业务系统,业务层都是承载业务流程和规则的地方。
业务层从外到内包含三层:第一层是业务服务,第二层是业务流程,第三层是业务组件。
具体如下图:2.2.1、业务服务业务服务是业务层对外的统一门面,它由三方面组成:业务接口、入参、出参。
a) 业务接口一个业务接口代表一个领域的业务服务,比如订单域的业务服务就由接口OrderService表示,会员域的业务服务就由接口MemberService表示。
接口可以按照执行性质分为读接口和写接口,比如OrderReadService和OrderWriteService。
读写分离的好处是可以对集群进行读写分组,从而管理流量,当然,单机系统读写分离意义不是太大。
领域内的操作则以业务接口中的方法的形式体现,比如订单域有下单createOrder,取消订单cancelOrder等等操作。
对于这些操作,尽量设计出有业务含义的方法,而不是增删改查,当然,对于一些简单的业务,也只能增删改查。
b)入参接下来,是入参的设计。
入参对于读方法,比较简单,不做讨论。
对于写方法,我们将入参设计成有层次的数据模型。
首先需要设计出公共的数据模型,比如订单数据模型,商家数据模型,商品数据模型等,然后将这些数据模型和一些特定业务下的个性数据结合,组成Request对象,这个request对象按照不同业务操作不同而不同,对应的返回结果就是response,它也是随着不同业务返回的参数不同。
举个例子,拿下餐饮订单来说,首先,我们应该识别出这些业务流程中一些比较基础的数据模型,比如餐饮领域的菜品、桌位等,这些模型之所以说是基础模型,是因为,不管下什么餐饮订单,菜品和桌位肯定是逃不了的,它们是可以被复用的!因此,我们分别为这些基础模型设计相对于的DO(Domian Object):DishDO(菜品)、BoardDO(桌位)等等,接下来,我们为下餐饮订单设计一个请求对象DishOrderCreateRequest其中DishOrderCreateRequest内部包含了DishDO 和BoardDO,另外会包含一些特定的属性,比如人数啊,折扣啊等等,这样一来就能做到通用和灵活兼顾,DishOrderCreateRequest代表的个性化的灵活的业务入参,而DishDO和BoardDO等则代表了不易变化的基础模型。
c) 出参最后,是出参的设计。
对于写方法,一般出参比较简单。
对于读方法,出参往往是一个结构与层次比较复杂的组合对象。
比如查询一个订单,这个订单有订单基本信息,还有商品信息,收货人地址信息等。
在设计出参的时候,结构上要设计成组合对象,但是真正查询的时候,通过查询选择器,去查询不同的组合对象。
比如查询选择器设置商品查询为true,地址查询为false,那么这次查询出的订单就只包含商品,而不包含地址。
2.2.2、业务流程业务流程其实就是对业务规则的解释,只是这种解释使用代码去实现的,我们要做的其实就是准确翻译这些业务规则,并维护好这些业务规则。
业务流程中可以大致分为三种动作节点,1、组装参数节点2、规则判断节点3、执行动作节点,其中每个动作节点都是一些业务代码的片段。
举个例子,下餐饮订单,我们第一步就是将上层传入的参数组装出一个基础的DishOrderDO(组装参数节点),然后按照特定的规则去填充这个DishOrderDO(规则判断节点),然后就是调用DAO去创建DishOrderDO (执行动作节点)。
业务流程是最容易变化的地方,要想维护好业务流程并不容易,总的思想是将大的业务流程拆分成小的业务流程,抽出每个业务流程中共有的代码片段,变成可维护的业务组件。
2.2.2、业务组件a) 基础组件业务组件其实是将一些内聚的可复用的代码片段进行封装。
和业务流程中的三种业务节点相对应,业务组件也分为三种:组装参数组件、规则判断组件、动作执行业务组件。
业务组件的抽象往往是对业务有了深刻理解之后才进行的,盲目地进行业务组件的抽象,往往到头来白忙活。
b) 能力对业务组件进行进一步抽象,可以得到能力。
业务能力是具有一定复用性的组件的组合,比如发短信能力=组装短信参数组件+发短信组件。
对于发短信能力,可以被不同的业务流程复用,比如订单下单成功发短信,支付成功发短信,逻辑都是相似的,只有内容不同。
能力是一种粒度比较大的组件,粒度越大,往往复用性就越小,对能力的抽取,也是基于对特定业务深刻的理解,没有一劳永逸的银弹。
c)更高纬度的抽象经过本人的实践,对于互联网这样的需求变化极快的场景,更高纬度的组件抽象往往性价比很低,不建议大家去做。
2.3、基础层基础层包含两个部分,第一是接口定义,第二是技术组件。
2.3.1、接口定义接口定义是按照不同的技术框架,同时结合业务需要,设计出合理的接口,对于业务组件来说,它们只会感知技术接口,而不会去感知技术实现,我们也不应该将具体的技术细节向上暴露,这也就是所谓的面向接口编程。
技术接口往往是业务与技术之间的桥梁,接口本身是含有业务含义的,最常见的就是DAO接口,我们设计DAO接口的时候,不会设计成insert、update、query这样业务无关的接口,而是设计成insertUser,updateUserById等等和业务相关的接口,同样的道理,设计缓存接口的时候,也不能设计成put、get这样的接口,而应该设计成cacheUser,deprecateUser这样的接口。
2.3.2、技术组件单机系统的技术组件一般来说分两种,一种是通用的技术组件,比如:数据存储、缓存、消息和调度任务、事务、锁。
一种是基础设施,比如spring容器,tomcat容器。
下面稍微谈谈通用技术组件。
数据存储:数据存储包括关系型数据库、非关系型数据库以及文件存储系统。
关系型数据库,比如MySQL,适合存放绝大部分业务数据。
非关系型数据库,比如hbase,可以存放历史日志,也可以对历史的MySQL数据进行归档。
文件存储系统,一般都是基于Linux文件系统,比如图片、html文件等等,也有基于HDFS的,用于大数据分析。
缓存:缓存按响应时间分,可以分为纳秒级缓存,毫秒级缓存和百毫秒级缓存。
纳秒级缓存就是一般的基于本地内存的缓存,比如encache,毫秒级缓存一般是集中式的内存缓存,比如memcache,由于访问时远程调用,因此响应时间会延长到几毫秒,百毫秒级缓存一般是集中式可持久化的缓存,比如redis,由于存在远程访问以及缓存击穿导致的读取持久化记录,它的响应时间会更长些,到几十甚至上百毫秒。
单机系统一般用本地内存缓存就够了,当缓存被击穿的时候,直接访问数据库。
消息和调度任务:消息和调度任务本质都是一种异步化的手段,区别在于消息无法控制异步的时间,而调度任务可以。
一般,消息发送出去后,监听消息的系统会立即收到消息,从而立即触发业务逻辑的执行,而调度任务则会按照调度规则,一次或者多次的执行业务逻辑。
单机系统中消息和调度任务用到的比较少,在做日志监控的时候可能会用到消息,在进行数据报表统计的时候可能会用到调度任务。
事务:事务本质都是基于数据库去实现的,单机系统的事务就是依赖数据库的事务,我们可以使用spring-tx的事务模板进行事务操作,在业务逻辑开发中,一定要把握事务的大小,建议把业务比较紧密的一堆数据库操作放在一个事务里,不要随意的为每个方法都开启事务。