软件架构设计与优化操作手册_第1页
软件架构设计与优化操作手册_第2页
软件架构设计与优化操作手册_第3页
软件架构设计与优化操作手册_第4页
软件架构设计与优化操作手册_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

软件架构设计与优化操作手册TOC\o"1-2"\h\u31642第一章软件架构设计概述 296811.1软件架构基本概念 2247431.2软件架构设计原则 2148851.3软件架构设计过程 311356第二章架构风格与模式 3172972.1常见架构风格 3139702.2常用设计模式 4279372.3架构风格与设计模式的选择 411887第三章系统模块划分 5165133.1模块划分原则 5147303.2模块间关系与协作 5279363.3模块划分案例分析 612544第四章组件设计 6228874.1组件设计原则 751994.2组件间依赖关系 7221904.3组件设计案例分析 718424第五章软件架构评估与优化 8219755.1架构评估方法 897765.2优化策略与手段 8106765.3优化案例分析 923087第六章软件架构与功能优化 934876.1功能优化概述 97306.2功能评估指标 1066486.3功能优化策略 1016348第七章软件架构与安全性 11239067.1安全性概述 1193267.2安全架构设计 11186637.3安全性优化策略 129553第八章软件架构与可维护性 13200988.1可维护性概述 139828.2可维护性评估方法 13196038.3可维护性优化策略 131509第九章软件架构与可扩展性 14302759.1可扩展性概述 1429049.2可扩展性设计原则 14102329.3可扩展性优化策略 1521297第十章软件架构与项目管理 152052610.1项目管理与架构设计的关系 15599510.2架构设计在项目管理中的应用 16627510.3项目管理中的架构优化策略 16第一章软件架构设计概述1.1软件架构基本概念软件架构是指将一个软件系统划分为多个组件,并定义这些组件之间的关系以及它们与环境的交互方式。软件架构是软件系统设计的重要组成部分,决定了系统的结构、功能、可维护性和可扩展性。良好的软件架构可以为系统提供清晰的视图,便于开发者理解、开发和维护。软件架构主要包括以下几个基本概念:(1)组件:软件架构的基本单元,可以是模块、库、服务、子系统等。(2)连接器:用于连接组件的元素,表示组件间的交互关系。(3)层次结构:将组件按照功能或职责划分为多个层次,有助于提高系统的模块化和可维护性。(4)模式:软件架构中常见的解决方案,用于解决特定类型的问题。1.2软件架构设计原则软件架构设计原则是指在构建软件架构时,应当遵循的基本原则。以下是一些常见的软件架构设计原则:(1)分层原则:将系统划分为多个层次,每个层次具有明确的职责,降低组件间的耦合度。(2)模块化原则:将系统划分为多个模块,每个模块具有单一职责,便于开发和维护。(3)开放封闭原则:软件实体应当对扩展开放,对修改封闭。即在不修改原有代码的基础上,允许添加新功能。(4)依赖倒置原则:高层模块不应依赖于低层模块,二者都应依赖于抽象。抽象不应依赖于具体实现,具体实现应依赖于抽象。(5)接口隔离原则:客户端不应依赖于它不需要的接口。一个类应仅依赖于与其交互的特定接口。(6)迪米特法则:一个对象应当对其他对象有尽可能少的了解,降低组件间的耦合度。1.3软件架构设计过程软件架构设计过程是指在软件开发过程中,对软件架构进行规划、设计、评估和优化的系列活动。以下是软件架构设计的一般过程:(1)需求分析:了解项目需求,明确系统功能、功能、可维护性等目标。(2)架构规划:根据需求分析结果,确定系统架构的基本框架,包括组件、连接器和层次结构。(3)架构设计:细化架构规划,为每个组件和连接器定义详细的设计方案。(4)架构评估:评估架构设计的合理性,检查是否存在潜在问题,如功能瓶颈、安全性隐患等。(5)架构优化:针对评估结果,对架构进行优化,提高系统功能、可维护性和可扩展性。(6)架构实施:根据架构设计方案,编写代码并实现系统功能。(7)架构维护:在系统开发过程中,持续对架构进行维护和优化,保证系统稳定可靠。第二章架构风格与模式2.1常见架构风格在软件开发中,架构风格是指软件系统中元素的组织方式及其相互关联的规则。以下是一些常见的架构风格:分层架构:将系统分为多个层次,每一层代表一种抽象级别,常见的层次包括表示层、业务逻辑层、数据访问层。这种风格有助于分离关注点,便于维护和扩展。事件驱动架构:系统通过事件和事件处理程序来交互,事件可以是用户操作、消息队列中的消息等。这种风格适用于需要异步处理和高度解耦的系统。微服务架构:将应用分解为一组小型的、松散耦合的服务,每个服务实现特定的业务功能,并且可以独立部署和扩展。这种风格有助于提高系统的灵活性和可扩展性。管道与过滤器架构:数据通过一系列的过滤器进行处理,每个过滤器负责数据的特定处理任务,并通过管道传递给下一个过滤器。这种风格适用于数据流的处理。C/S(客户端/服务器)架构:客户端发送请求到服务器,服务器处理请求并返回响应。这种风格是传统的网络应用架构。B/S(浏览器/服务器)架构:是C/S架构的一种特例,用户通过浏览器访问服务器上的应用,适用于Web应用开发。2.2常用设计模式设计模式是在软件设计中经常出现的问题的通用、可重用的解决方案。以下是一些常用的设计模式:工厂模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。这种模式允许系统在不暴露创建逻辑的情况下创建对象。单例模式:保证一个类一个实例,并提供一个全局访问点。这种模式适用于需要全局访问且资源受限的场景。观察者模式:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。这种模式适用于事件驱动的系统。策略模式:定义一系列的算法,把它们一个个封装起来,并使它们可以互相替换。这种模式允许算法的变化独立于使用算法的客户。装饰器模式:动态地给一个对象添加一些额外的职责,而不改变其接口。这种模式适用于在不修改对象结构的情况下扩展对象的功能。适配器模式:将一个类的接口转换成客户期望的另一个接口,使得原本接口不兼容的类可以合作。这种模式适用于接口不兼容但需要协同工作的场景。2.3架构风格与设计模式的选择选择合适的架构风格和设计模式是软件设计中的关键步骤。选择时需要考虑以下因素:系统的需求:根据系统的功能需求、功能需求、可扩展性需求等因素来选择合适的架构风格和设计模式。系统的规模:小型系统可能更适合简单的架构风格和设计模式,而大型系统可能需要更复杂和灵活的架构。团队的熟悉度:团队成员对某种架构风格或设计模式的熟悉程度会影响其选择,选择团队熟悉的方案可以提高开发效率和降低维护成本。技术的成熟度:选择经过实践验证的架构风格和设计模式,可以减少技术风险。系统的复杂性:复杂的系统可能需要多种架构风格和设计模式的组合,以达到最佳的系统设计效果。在软件设计中,架构风格和设计模式的选择是一个迭代和演化的过程,需要根据实际情况进行不断的调整和优化。第三章系统模块划分3.1模块划分原则系统模块划分是软件架构设计的重要环节,合理的模块划分有助于提高系统的可维护性、可扩展性和可复用性。以下是模块划分的几个基本原则:(1)功能独立性原则:模块应具备明确、独立的功能,尽量减少模块间的功能重叠。每个模块应承担一项具体的功能,保证功能的单一性。(2)模块耦合度原则:模块之间的耦合度应尽量低,降低模块间的依赖关系。模块间的通信应通过明确定义的接口进行,避免直接访问其他模块的内部数据。(3)模块内聚性原则:模块内部各元素之间的关联度应尽量高,保持模块的内聚性。模块内聚性越高,模块的可维护性和可复用性越强。(4)模块大小原则:模块的大小应适中,过大或过小的模块都不利于维护。过大模块可能导致模块内部结构复杂,过小模块则可能导致模块间关系过于紧密。(5)模块层次原则:模块应按照层次结构进行组织,形成清晰的层次关系。顶层模块负责整体功能,底层模块负责具体实现。3.2模块间关系与协作模块间关系主要包括以下几种:(1)依赖关系:模块A依赖于模块B,表示模块A在执行过程中需要调用模块B提供的服务或数据。(2)调用关系:模块A调用模块B,表示模块A在执行过程中直接调用模块B的接口。(3)数据传递关系:模块A与模块B之间存在数据传递,表示模块A将数据传递给模块B,或模块B将数据传递给模块A。模块间的协作方式有以下几种:(1)同步协作:模块A调用模块B,等待模块B返回结果后再继续执行。(2)异步协作:模块A调用模块B,不等待模块B返回结果,继续执行其他任务。(3)事件驱动协作:模块A监听特定事件,当事件发生时,模块A调用模块B进行处理。(4)消息队列协作:模块A将请求发送到消息队列,模块B从消息队列中获取请求并处理。3.3模块划分案例分析以下以一个在线购物系统为例,分析模块划分的具体过程。(1)功能模块划分:(1)用户模块:负责用户注册、登录、个人信息管理等功能。(2)商品模块:负责商品展示、商品分类、商品详情等功能。(3)购物车模块:负责购物车管理、商品添加、商品删除等功能。(4)订单模块:负责订单创建、订单查询、订单支付等功能。(5)支付模块:负责支付接口调用、支付结果通知等功能。(2)模块间关系与协作:(1)用户模块与商品模块:用户模块负责用户身份验证,商品模块在展示商品信息时,需要调用用户模块进行身份验证。(2)购物车模块与商品模块:购物车模块在添加商品时,需要调用商品模块获取商品信息。(3)订单模块与购物车模块:订单模块在创建订单时,需要调用购物车模块获取购物车中的商品信息。(4)支付模块与订单模块:支付模块在收到支付请求时,需要调用订单模块查询订单信息。通过以上案例分析,可以看出模块划分在软件架构设计中的重要性。合理的模块划分有助于提高系统的可维护性和可扩展性,为后续的开发和维护工作提供便利。第四章组件设计4.1组件设计原则组件设计是软件架构设计的重要组成部分,其原则主要包括以下几点:(1)模块化:组件应具备独立的功能,便于开发和维护。模块化设计有助于降低系统复杂度,提高代码的可重用性。(2)高内聚、低耦合:组件内部的高内聚性有利于代码的可维护性,而组件间的低耦合性则有助于降低系统间的相互影响,提高系统的稳定性。(3)可扩展性:组件设计应考虑未来可能的需求变更,预留足够的扩展空间。可扩展性设计有助于降低系统升级和扩展的难度。(4)复用性:组件应具备较高的复用性,减少重复开发。复用性设计可以提高开发效率,降低维护成本。(5)可靠性:组件应具备较高的可靠性,保证系统在运行过程中能够稳定地完成任务。4.2组件间依赖关系组件间的依赖关系是组件设计的关键因素之一。合理的依赖关系有助于降低系统复杂度,提高系统稳定性。以下为组件间依赖关系的几种类型:(1)直接依赖:组件A直接调用组件B的功能,此时组件A依赖于组件B。(2)间接依赖:组件A调用组件C的功能,而组件C又依赖于组件B,此时组件A间接依赖于组件B。(3)循环依赖:组件A依赖于组件B,组件B又依赖于组件A,形成循环依赖关系。(4)依赖注入:组件A通过依赖注入的方式引入组件B,实现解耦。4.3组件设计案例分析以下为一个组件设计案例的分析:案例:某电商平台购物车功能背景:电商平台购物车功能需要支持商品添加、删除、修改数量等操作,同时与订单、库存、支付等模块进行交互。分析:(1)模块化:购物车组件应具备以下模块:商品添加、商品删除、商品修改数量、商品列表展示等。(2)高内聚、低耦合:购物车组件与订单、库存、支付等模块的交互通过接口进行,降低耦合性。(3)可扩展性:购物车组件预留扩展接口,如优惠券、满减活动等。(4)复用性:购物车组件可应用于不同场景,如PC端、移动端等。(5)可靠性:购物车组件需保证在并发情况下,数据一致性和稳定性。通过以上分析,我们可以得出一个符合组件设计原则的购物车组件设计方案。在实际开发过程中,还需根据具体需求进行调整和优化。第五章软件架构评估与优化5.1架构评估方法软件架构评估是保证软件系统质量的关键环节,旨在对现有架构的合理性、可用性、可维护性等方面进行综合评价。以下是几种常见的架构评估方法:(1)静态代码分析:通过分析代码的结构、复杂度、规范性等指标,评估架构的内在质量。(2)架构审查:组织专家团队对软件架构进行审查,从业务需求、技术实现、功能优化等多个维度对架构进行评价。(3)功能测试:通过模拟实际运行场景,对软件系统的功能进行测试,评估架构在高并发、大数据等场景下的表现。(4)用户体验评估:从用户角度出发,对软件系统的易用性、交互设计等方面进行评估。(5)安全性评估:对软件系统的安全功能进行评估,包括数据保护、漏洞防护等方面。5.2优化策略与手段针对评估过程中发觉的问题,以下是一些常见的优化策略与手段:(1)模块化:将复杂的业务逻辑拆分为多个模块,降低系统间的耦合度,提高可维护性。(2)组件化:将功能相似的模块组合成组件,实现代码的复用,提高开发效率。(3)分布式架构:将系统拆分为多个分布式节点,提高系统功能和可扩展性。(4)缓存机制:合理使用缓存,减少数据库访问次数,提高系统响应速度。(5)负载均衡:通过负载均衡技术,将请求合理分配到多个服务器,提高系统并发能力。(6)数据分片:将大量数据分散存储到多个数据库,提高数据查询效率。5.3优化案例分析以下是两个典型的优化案例分析:案例一:某电商平台问题描述:在高峰期,电商平台访问量激增,导致系统功能下降,用户体验不佳。优化策略:(1)采用分布式架构,将订单、商品、用户等模块拆分为独立的服务,实现横向扩展。(2)引入缓存机制,减少数据库访问次数,提高响应速度。(3)使用负载均衡技术,合理分配请求到多个服务器。优化效果:经过优化,系统功能得到显著提升,高峰期访问量不再对用户体验产生影响。案例二:某金融系统问题描述:金融系统存在潜在的安全风险,数据泄露可能导致严重后果。优化策略:(1)对系统进行安全性评估,发觉并修复安全漏洞。(2)采用数据加密技术,保护用户数据安全。(3)实施权限控制,限制敏感数据的访问。优化效果:经过优化,金融系统的安全性得到有效保障,避免了潜在的数据泄露风险。第六章软件架构与功能优化6.1功能优化概述信息技术的快速发展,软件系统的复杂性日益增加,功能问题成为影响用户体验和系统稳定性的关键因素。功能优化是指在保证系统功能正确的前提下,通过调整系统架构、优化代码和资源分配等手段,提高系统的运行效率和处理速度。功能优化是软件架构设计的重要环节,对提高系统的可用性、可靠性和可扩展性具有重要意义。6.2功能评估指标功能评估是功能优化的基础,合理的功能评估指标能够帮助开发者和运维人员准确地定位功能瓶颈。以下是一些常用的功能评估指标:(1)响应时间:系统从接收到请求到返回响应结果的时间。响应时间越短,系统功能越好。(2)吞吐量:单位时间内系统处理请求的数量。吞吐量越高,系统功能越好。(3)资源利用率:系统资源(如CPU、内存、磁盘等)的使用情况。资源利用率越高,系统功能越好。(4)系统稳定性:系统在长时间运行过程中,能够保持稳定运行的能力。(5)模块耦合度:模块之间的依赖关系。模块耦合度越低,系统功能越好。(6)代码质量:代码的可读性、可维护性和可扩展性。代码质量越高,系统功能越好。6.3功能优化策略(1)架构优化(1)分布式架构:通过将系统拆分为多个子系统,实现负载均衡和资源优化分配。(2)微服务架构:将复杂的业务系统拆分为多个独立的微服务,降低系统间的耦合度,提高系统功能。(3)缓存机制:在系统中引入缓存机制,减少对数据库的访问次数,提高系统响应速度。(2)代码优化(1)算法优化:采用更高效的算法,降低时间复杂度和空间复杂度。(2)数据结构优化:选择合适的数据结构,提高数据处理效率。(3)并发编程:合理使用多线程、多进程等技术,提高系统并发处理能力。(3)资源优化(1)CPU优化:通过调整线程池大小、使用异步编程等技术,提高CPU利用率。(2)内存优化:合理分配内存空间,减少内存碎片,避免内存泄漏。(3)磁盘优化:使用高效的文件存储和访问策略,提高磁盘读写速度。(4)系统监控与调优(1)功能监控:实时监控系统的功能指标,发觉瓶颈问题。(2)日志分析:通过日志分析,定位功能问题。(3)系统调优:根据监控数据和日志分析结果,对系统进行调优,提高系统功能。通过以上策略,可以在软件架构设计与开发过程中实现功能优化,提高系统的运行效率和处理速度。第七章软件架构与安全性7.1安全性概述安全性是软件架构设计中的重要组成部分,它涉及到保护系统免受恶意攻击、非法访问和意外破坏的能力。在软件架构中,安全性主要包括以下几个方面:(1)数据安全:保证数据的保密性、完整性和可用性,防止数据泄露、篡改和丢失。(2)访问控制:对用户进行身份验证和授权,保证合法用户才能访问系统资源。(3)加密与解密:对敏感数据进行加密处理,防止数据在传输过程中被窃取。(4)审计与监控:记录系统操作日志,及时发觉和响应安全事件。(5)安全通信:采用安全协议,保障数据在传输过程中的安全性。7.2安全架构设计安全架构设计旨在构建一个安全、可靠的软件系统,以下为安全架构设计的关键步骤:(1)安全需求分析:分析系统面临的安全威胁和风险,明确安全需求和目标。(2)安全策略制定:根据安全需求,制定相应的安全策略,包括身份验证、访问控制、加密算法等。(3)安全组件设计:根据安全策略,设计相应的安全组件,如身份认证模块、权限管理模块、加密模块等。(4)安全架构评估:评估安全架构的设计合理性,保证其能够满足安全需求。(5)安全架构实现:根据设计的安全架构,开发相应的安全功能模块。以下为几种常见的安全架构模式:(1)分层安全架构:将安全功能划分为不同的层次,如网络层、传输层、应用层等,各层次之间相互独立,降低安全风险。(2)集中式安全架构:将安全功能集中到一个安全服务器上,便于管理和维护。(3)分布式安全架构:将安全功能分散到各个节点上,提高系统的可扩展性和容错能力。7.3安全性优化策略为了提高软件系统的安全性,以下是一些安全性优化策略:(1)代码审计:对系统代码进行安全审计,发觉潜在的安全漏洞,及时修复。(2)安全编码:遵循安全编码规范,编写安全的代码,减少安全漏洞的产生。(3)安全测试:对系统进行安全测试,包括静态分析、动态分析、渗透测试等,发觉并修复安全漏洞。(4)安全防护:采用防火墙、入侵检测系统等安全防护措施,提高系统的防御能力。(5)安全更新与维护:定期对系统进行安全更新和维护,保证系统安全性与时俱进。(6)安全培训与意识培养:加强员工的安全意识培训,提高整个团队的安全防护能力。(7)安全监控与响应:建立安全监控体系,实时监控系统安全状态,及时响应安全事件。“第八章软件架构与可维护性8.1可维护性概述在软件开发的过程中,可维护性是衡量软件质量的重要指标之一。可维护性指的是软件在运行过程中,对系统进行修改、升级、扩展和修复的难易程度。一个高可维护性的软件系统,能够降低长期维护成本,提高开发效率,增强用户体验。可维护性包括以下几个方面:(1)模块性:软件应划分为独立的模块,每个模块具有明确的职责,降低模块间的耦合度。(2)可读性:代码应具有良好的可读性,便于理解和维护。(3)可扩展性:软件应具备良好的扩展性,便于增加新功能和适应业务变化。(4)可靠性:软件在运行过程中应具有较高的可靠性,降低故障率和修复成本。(5)可测试性:软件应易于测试,保证功能的正确性和稳定性。8.2可维护性评估方法为了评估软件的可维护性,可以采用以下几种方法:(1)代码静态分析:通过分析代码的结构、复杂度、重复度等指标,评估软件的可维护性。(2)代码变更频率:统计软件在运行过程中的代码变更次数,评估软件的可维护性。(3)故障修复时间:统计软件在发生故障后,修复所需的时间,评估软件的可维护性。(4)用户反馈:收集用户对软件维护工作的反馈,评估软件的可维护性。(5)维护成本:计算软件维护过程中的成本,评估软件的可维护性。8.3可维护性优化策略为了提高软件的可维护性,可以采取以下优化策略:(1)模块化设计:将软件划分为独立的模块,降低模块间的耦合度,提高可维护性。(2)代码规范:制定统一的代码规范,提高代码的可读性。(3)设计模式:运用设计模式,提高代码的复用性和可扩展性。(4)单元测试:编写单元测试,保证代码的正确性和稳定性。(5)代码重构:定期进行代码重构,降低代码复杂度,提高可维护性。(6)自动化部署:采用自动化部署工具,提高部署效率和稳定性。(7)文档编写:编写详细的开发文档和用户手册,方便开发和维护人员理解和使用软件。(8)持续集成:采用持续集成工具,自动化构建、测试和部署软件,提高软件质量。(9)监控与报警:建立完善的监控体系,及时发觉和解决软件运行中的问题。(10)人员培训:加强开发人员的培训,提高团队的技术水平,降低维护难度。第九章软件架构与可扩展性9.1可扩展性概述可扩展性是软件架构设计中的一个重要指标,它指的是软件系统在面临业务需求变更、数据量增长或并发用户增加时,能够以较低的成本进行扩展,以满足新的业务需求。可扩展性是衡量软件系统优劣的关键因素之一,对于保证系统长期稳定运行具有重要意义。9.2可扩展性设计原则为了提高软件架构的可扩展性,以下设计原则应在架构设计过程中得到遵循:(1)分层设计原则:将系统划分为多个层次,每个层次负责不同的功能,降低层与层之间的耦合度,便于扩展和维护。(2)模块化设计原则:将系统划分为多个模块,每个模块具有独立的功能,模块之间通过接口进行通信,便于独立开发和扩展。(3)组件化设计原则:将系统划分为多个组件,每个组件具有独立的功能和职责,组件之间通过接口进行交互,便于替换和扩展。(4)面向对象设计原则:采用面向对象的方法进行系统设计,利用封装、继承和多态等特性,提高代码的可复用性和可维护性。(5)松耦合设计原则:降低系统模块之间的依赖关系,采用事件驱动、回调函数等机制,提高系统的可扩展性。9.3可扩展性优化策略以下是一些常见的可扩展性优化策略:(1)异步处理:通过异步处理,降低系统对资源的占用,提高系统的响应速度和并发处理能力。(2)负载均衡:采用负载均衡技术,将请求分发到多个服务器节点,提高系统的并发处理能力和稳定性。(3)缓存机制:通过缓存机制,减少对后端存储系统的访问次数,降低系统的延迟,提高系统功能。(4)数据分片:将大量数据分布到多个存储节点上,降低单个节点的负载,提高系统的数据存储和处理能力。(5)分区部署:将系统划分为多个分区,每个分区独立部署,提高系统的可用性和可扩展性。(6)微服务架构:采用微服务架构,将系统拆分为多个独立的服务,每个服务负责特定的功能,便于独立扩展和维护。(7)弹性伸缩:根据系统负载动态调整资源分配,实现资源的弹性伸缩,提高系统的可扩展性。(8)监控与告警:建立完善的监控和告警机制,实时掌握系统运行状态,及时发觉和解

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论