`
Angel_Night
  • 浏览: 19000 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ssh优缺点

阅读更多

面试归来

技术面试官叫我谈谈 ssh优缺点

平时用起来倒是挺顺手..但是从来没有系统的总结过..导致很多点会都没有说出来..

这次我认真总结了一下...


常说的好处 开源
常说的坏处 配置文件过大我就不提了


struts

优点:
          收集,验证表单数据相比传统servlet简单
          优雅的实现可配置的请求转发

缺点:
          属侵入设计(actionform,action都无法复用)
          与serlvetAPI严重耦合..无法摆脱容器
          action与web层耦合.不方便测试
          标准struts的action是非线程安全(很多简历上写着"精通Struts"的高手们都忽视的问题)

不熟悉:
          struts标签库没怎么用过(常用jstl)
          国际化只学过,没用过.停留在demo级别
          validation.xml(配置文件写多了,有时候也想逃避)
          支持表现层技术单一(一直作为struts的缺点来说...但是我也就会jsp而已)


Spring

优点:
          IoC虽然不好形容,但是我从最开始接触spring时就觉得这是个很大的优点
          aop(我自己写过的aop就只有日志...)
          对象容器
                管理对象的生命周期(集成struts摆脱线程问题)
          测试也变得方便
          多数代码没有侵入spring的API
          对于hibernate有很好的支持

          还有很多好处(权限,email支持,调度任务,权限,事务等等),我把我知道的对于ssh的尽量总结出来

缺点:
          缺点我不好提出来..without ejb我没看过..甚至ejb我也不会..
          我也就简单用用...不过我听说过这些缺点(如果有错请及时指正)

          如果开发者设计不出合理的接口.导致一改就改多处.反而造成不便
          不支持分布式部署。
          不是一站式方案(开放的体系和封闭的体系这种话题我从来参与不进去..但是还是常看看的)

 

          使用了反射来管理其容器中的bean,在程序中增大了内存和运行计算的时间,当然,这和spring带来的管理方便的好处来比,可以把此缺点忽略不计。


hibernate

优点:
          ORM 使数据层更加对象化..摆脱所谓的阻抗不匹配
          sql方言的存在使得开发不用过多考虑 数据库差异 的问题
          非侵入式设计

缺点:
          个人感觉熟练使用的话曲线太陡..(尤其对于多表间复杂查询)

          不太适合做复杂的select语句查询

不熟悉:
          Transaction(一般都直接交给spring了..接触不错..demo级别)
          缓存机制(Session的缓存和SessionFactory的缓存(内置缓存和外置缓存))

 

          聚集性操作数据(这种时候jdbc也白费吧...还是存储过程)

错觉:
          hibernate对于瑕疵的处理不够
          比如:有entity-name的映射 save 就抛错这是我很久以前就发现的问题..一直没有得到修正..难道这不是问题?


可能高手从我总结就可以看出我水平有多菜....

不过还是不要吝惜口水 喷我吧..

在javaeye被喷 只会使我进步  面试时候被喷 少的就是机会了

 

 

 

内容更改记录:

 

javaeye_id 修改原因(也就是回复部分内容)
xiaoyuqi00 hibernate优点:非侵入式设计
这点我不怎么认同,如果你用hql的话很数据层就很麻烦了,虽然hibernate支持sql但是既然用hibernate,那首选肯定是hql或者criteria
geeksun

使用了反射来管理其容器中的bean,在程序中增大了内存和运行计算的时间,当然,这和spring带来的管理方便的好处来比,可以把此缺点忽略不计

blackstreet 不太适合做复杂的select语句查询

 

 

 

 

分享到:
评论
78 楼 xiao3er 2010-11-16  
我写了 有一两个网站了 可是 都是用公司 封装好的框架 根本就不涉及这些 而且 配置也很多
77 楼 wangdgsc 2010-09-06  
struts1,目前项目中一直在使用,我觉得一个企业使用struts1或struts2,又或者spring mvc,他们的关系应该不会很大,如果一个公司使用struts1用了三四年,然后说struts2很火,很牛X,难道就都去用struts2?我觉得不太现实,框架只是让大家从比较繁琐在底层中解脱出来,让大家能更好的关注业务,用什么不都能达到目的
hibernate3, 最大的好处是进行数据添加,修改,删除的时候方便,如果是简单的查询还好,复杂的查询性能好像不是很高,当然,也可能是我水平菜,没能体会到其中的精髓吧,
spring,一直在用,缺点暂时没有感觉到
76 楼 Tracy-Lcz 2010-09-06  
Angel_Night 写道
wj539h 写道
你确实很菜,你对SSH还不是很熟,而且struts1我真想不到现在居然还有人在用


是的,我确实很菜...接触web开发时间很短 属于应届毕业生吧...

和那些简历上写着精通ssh的毕业生不同 我只能简单用用



不过后半句是不是有些夸张了...

08年Indeed全球Java职位需求技能统计

mvc框架百分比 struts2不过才0.2% struts1有80%

虽然数据比较久了(我没找到新的 也不会统计...)

但是也不会迅速消亡到"居然还有人在用这种地步吧"?

毕竟struts1比较老了..每个公司都有相应的再封装...


可能是文科的吧 用了夸张的修饰我这种不会写作文的家伙还给认真了








不要随便说别人菜。
75 楼 lyy3323 2010-08-19  
<div class="quote_title">Angel_Night 写道</div>
<div class="quote_div">
<p>面试归来<br><br>技术面试官叫我谈谈 ssh优缺点<br><br>平时用起来倒是挺顺手..但是从来没有系统的总结过..导致很多点会都没有说出来..<br><br>这次我认真总结了一下...<br><br><br>常说的好处 开源<br>常说的坏处 配置文件过大我就不提了<br><br><br><span style="font-size: small;"><strong>struts</strong> </span><br><br>优点:<br>          收集,验证表单数据相比传统servlet简单<br>          优雅的实现可配置的请求转发</p>
<p>        <span style="color: #ff0000;">  你忘记说MVC概念对servlet模式影响深远。。。。</span></p>
<p><br><br>缺点:<br>          属侵入设计(actionform,action都无法复用)<br>          与serlvetAPI严重耦合..无法摆脱容器<br>          action与web层耦合.不方便测试<br>          标准struts的action是非线程安全(很多简历上写着"精通Struts"的高手们都忽视的问题)</p>
<p><span style="color: #ff0000;">     Struts的FormBean把所有的数据都作为String类型,需要额外转换。</span></p>
<p><span style="color: #ff0000;">配置文件还是略显繁琐。。</span></p>
<p><br><br>不熟悉:<br>          <span style="color: #ff0000;">struts标签库没怎么用过(常用jstl),既是缺点也是有点。。<br></span>          国际化只学过,没用过.停留在demo级别<br>          validation.xml(配置文件写多了,有时候也想逃避)<br>          支持表现层技术单一(一直作为struts的缺点来说...但是我也就会jsp而已)<br><br><br><span style="font-size: small;"><strong>Spring</strong> </span><br><br>优点:<br>          IoC虽然不好形容,但是我从最开始接触spring时就觉得这是个很大的优点<br>          aop(我自己写过的aop就只有日志...)<br>          对象容器<br>                管理对象的生命周期(集成struts摆脱线程问题)<br>          测试也变得方便<br>          多数代码没有侵入spring的API<br>          对于hibernate有很好的支持<br>          还有很多好处(权限,email支持,调度任务,权限,事务等等),我把我知道的对于ssh的尽量总结出来</p>
<p><span style="color: #ff0000;">比如singleton等等,解耦。。</span><br><br>缺点:<br>          缺点我不好提出来..without ejb我没看过..甚至ejb我也不会..<br>          我也就简单用用...不过我听说过这些缺点(如果有错请及时指正)<br><br>          如果开发者设计不出合理的接口.导致一改就改多处.反而造成不便<br>          不支持分布式部署。<br>          不是一站式方案(开放的体系和封闭的体系这种话题我从来参与不进去..但是还是常看看的)</p>
<p> </p>
<p>          使用了反射来管理其容器中的bean,在程序中增大了内存和运行计算的时间,当然,这和spring带来的管理方便的好处来比,可以把此缺点忽略不计。 </p>
<p> </p>
<p><span style="color: #ff0000;">过于灵活算不算一个缺点呢?</span><br><br><br><span style="font-size: small;"><strong>hibernate</strong> </span><br><br>优点:<br>          ORM 使数据层更加对象化..摆脱所谓的阻抗不匹配<br>          sql方言的存在使得开发不用过多考虑 数据库差异 的问题<br>          <span style="text-decoration: line-through;">非侵入式设计</span> </p>
<p> </p>
<p><span style="color: #ff0000;">不好说什么,可以对比一下ibatis.....</span><br><br>缺点:<br>          个人感觉熟练使用的话曲线太陡..(尤其对于多表间复杂查询)</p>
<p>          不太适合做复杂的select语句查询<br><br>不熟悉:<br>          Transaction(一般都直接交给spring了..接触不错..demo级别)<br>          缓存机制(Session的缓存和SessionFactory的缓存(内置缓存和外置缓存))</p>
<p> </p>
<p>          聚集性操作数据(这种时候jdbc也白费吧...还是存储过程)<br><br>错觉:<br>          hibernate对于瑕疵的处理不够<br>          比如:有entity-name的映射 save 就抛错这是我很久以前就发现的问题..一直没有得到修正..难道这不是问题?<br><br><br>可能高手从我总结就可以看出我水平有多菜....<br><br>不过还是不要吝惜口水 喷我吧..<br><br>在javaeye被喷 只会使我进步  面试时候被喷 少的就是机会了</p>
<p> </p>
<p> </p>
<p> </p>
<p>内容更改记录:</p>
<p> </p>
<table class="quote_title" style="height: 75px;" border="1"><tbody>
<tr>
<td>javaeye_id</td>
<td>修改原因(也就是回复部分内容)</td>
</tr>
<tr>
<td>xiaoyuqi00</td>
<td>hibernate优点:非侵入式设计<br>这点我不怎么认同,如果你用hql的话很数据层就很麻烦了,虽然hibernate支持sql但是既然用hibernate,那首选肯定是hql或者criteria</td>
</tr>
<tr>
<td>geeksun</td>
<td>
<p>使用了反射来管理其容器中的bean,在程序中增大了内存和运行计算的时间,当然,这和spring带来的管理方便的好处来比,可以把此缺点忽略不计</p>
</td>
</tr>
<tr>
<td>blackstreet</td>
<td>不太适合做复杂的select语句查询 </td>
</tr>
</tbody></table>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
</div>
<p> </p>
<p> </p>
74 楼 laserdance 2010-08-18  
我面试也被问ssh了,其实我也没怎么用过,我讲一下我自己的理解,请用过的同志给我扫下盲,struts+hibernate+spring,  spring 提供xml配置文件和事务管理,可以配置数据源,hibernate 上面有同学讲了,提供java类和配置文件 对应database 表中一条记录,可以由myeclipse自动来生成,这里需要手动配置一下hbm.xml,struts提供action,,,web层 提供action和service,此service接口屏蔽了底层操作database的实现,由spring将dao(是具体的database操作实现)注入到service中,如果系统中用到了缓存,说hibernate提供一级缓存,其实就是内存缓存(也可以自己实现,其实就是将对象放到Map中,下次请求时先检查Map,如果有则直接返回,没有,在去database查),二级缓存据说是留了接口,可以ehcache来实现,我在生产环境中没用过,不敢评价
ssh 怎么分配MVC这三层架构呢,,我不是很清楚,请大家帮我扫下盲,V C 由struts的jsp和action ,actionMapping来实现,,M 由hibernate 来实现,spring 只应用了IoC功能,在web层应用时才将dao注入service,请指教
73 楼 dothwinds 2010-07-20  
liukai 写道
SSH框架不管有什么优缺点,能精通的很少很少.
很多人对SSH只是知其然而不知其所以然.那些问SSH有什么优缺点的面试官
我觉得水平大多数也一般.
有高手用过springMVC 和SSH的么?
话说我工作以来一直用的springMVC 感觉很良好
基本上做B/S开发完全够了~

Spring3.0以后的Spring MVC比较好,用的挺舒服;至于Struts2感觉有点臃肿,太多的拦截器。。。
72 楼 liukai 2010-07-19  
SSH框架不管有什么优缺点,能精通的很少很少.
很多人对SSH只是知其然而不知其所以然.那些问SSH有什么优缺点的面试官
我觉得水平大多数也一般.
有高手用过springMVC 和SSH的么?
话说我工作以来一直用的springMVC 感觉很良好
基本上做B/S开发完全够了~
71 楼 抛出异常的爱 2010-07-14  
如果从windows上传文件会把文件名转成小写....
70 楼 finallygo 2010-07-14  
怎么没有人觉得ssh整合的web项目启动很慢呢?
69 楼 bluemusic 2010-07-14  
用了struts1.x有段时间了
也来谈谈感受
s1的确有线程不安全的毛病,这个的确是个比较大的忌讳,我们用框架的目的是为了让开发简化,如果线程安全的问题导致开发复杂那可以说是个问题,但不排除有好的解决方案,没有封装过使其变成安全的,暂时不发表评论
有人说测试不方便,测试不方便那是因为赤裸裸的s1.x好比1个刚买来的智能手机,你不装点常用软件,那当然用起来有些不爽,可以将action重新封装,然后写成s2.x类似的,自己的action都继承自己封装的action,然后这些action就会很像pojo了,测试就不成问题了
hib3用过一段时间了,不敢说有深入研究,调用存储过程得依赖原生API,复杂的sql也能支持(关联表太多),另外没有足够的缓存支持最好别用hib,还是封装下好:)
spring的缺点不是配置太多,相反认为配置多是给予一定的灵活性
同样封装过后可以做懒人做的事,套用je名句约定大于配置,而Rod Johnson本人做的事情是让spring轻量级,减少入侵。
真要说缺点的话就是有人会乱用spring的API,多些规范和封装就能解决如此问题
世上没有银弹,抨击ssh的是希望看到有更好的解决方案,有时只是缺少暮然回首的那份勇气,之前有提出其他方案的这里就不例举了
68 楼 ynstudio 2010-02-10  
夜之son 写道
我们都希望自己很强,可是技术就像是风,毫无方向啊。I am a bit green.

呵呵,这句话蛮好玩的。技术就像风一样,哈哈。你是不是也是风一样的哥们啊。
67 楼 424a 2010-02-04  
wj539h 写道
你确实很菜,你对SSH还不是很熟,而且struts1我真想不到现在居然还有人在用

说这种话的人其实才是菜鸟,学了几天struts2以后,就觉的自己天下无敌了,然后所有用struts1的人都是菜鸟,所有用的struts1的系统都是垃圾系统,但他自己根本连个项目都没做过!!他本身就是一个大杯具!!
66 楼 zcy860511 2010-02-04  
Angel_Night 写道
archerfrank 写道
action线程不安全也算是缺点么。。。


线程这个地方的确我不是很熟悉

根据我浅薄的线程知识 不要在action中直接定义实例变量 问题就不会很大(不肯定啊)

但是不在action中定义对spring ioc有些不方便...

不知道能否给解释一下 我的线程的确连入门都不好说

线程安全的问题本来就应该交给容器去做,一个真正高速的应用程序应该是Prototype调用,而不应该老和spring默认的singleton一样,因为singleton必然带来多用户使用时的同步问题,所以一般我都不会选择singleton,确实不得已要使用,也会使用部分同步,或者使用原子操作避免同步的发生

举个简单的例:HashMap和HashTable内部实现一样,唯一不同的就是同步,后者是同步的,但是前者效率是后则的2倍以上
65 楼 zcy860511 2010-02-04  
Hibernate实现了面向对象的SQL创建方式Criteria,这种方式可以实现所有的查询,这样在可读性上也提升了
64 楼 zcy860511 2010-02-04  
withoutme_hw 写道
Hibernate还有一个缺点,面试官提示我说Hibernate有没有什么不能做到,而JDBC可以做到的?
Hibernate不能再运行时动态创建表,JDBC是可以做到的

动态创建表本来就不是一个好习惯,或者说这是一个大忌!
为什么?你自己想吧,你在运行程序的时候真的需要动态添加实体类么?你确定是实体类不是实体对象!!
63 楼 J-catTeam 2010-02-03  
1.struts第一个优点应该是实现了MVC。
并且针对线程安全的问题,struts1会有,因为它默认是采用单例,struts2就不是·一个请求一个实例。
struts2对于表现层的支持已经很不错了。并且做的很全面
2.spring的核心就是IOC和管理。
还有一个更重要的原因就是spring因为有大团队支持的原因所以对于其他开源框架的支持快速并且优秀。
对于spring的缺点目前我觉得是太过于臃肿了,当然这个也不能避免了。至于lz你说的他利用反射来做,我只能说,没有任何一个框架不会用到反射,因为框架是用一致的形式去解决未知的代码,只能用反射做。
3.hibernate的优点·我仅仅认为它是第一个ORM的框架,在MVC的切分和JDBC的封装上做的靠前。
对于他的HQL和他的缓存我并不认同
HQL会导致你根本无法执行你真正想执行的sql,调错或者自己查看代码的时候十分困难,这种hql设计已经起到干扰作用了,当然平时我们写一个类似于select * from user where username=‘jason’的这种sql是无所谓的,但是在大型应用中sql是复杂的,多变的,所以对于这一点iBATIS做的很好,不从根本上去干扰sql,但是又起到管理和切分的作用
hibernate的缓存并不是高效的,在一般的开发中对于缓存都会有专门的缓存框架,如果使用了hibernate,就会太过于依赖它的缓存,没有缓存他的效率不会太高,所以一般的企业开发不采用hibernate
加油
62 楼 foxlish 2010-01-12  
struts1.X的标签纯粹是个摆设
61 楼 leejon 2010-01-11  
lizhuang 写道
Struts1优点:严格的采用MVC方式进行开发,便于分工。V层其实是吹牛,至今就没看到美工会写JSTL标签。
Hibernate缺点:主要是大规模写入数据的时候会超慢。

这篇贴应该归位新手帖。


弱弱的问一下?美工写前台页面取数据用<%%>?
60 楼 gavin.zheng 2010-01-01  
我说下优缺点吧,面试也问到过,不过面试时老回答不上来:
struts2 优点:mvc的action,view层分离,c使用配置文件控制方便,2比1的线程安全,而且不需要使用接口,可以完全脱离容易
缺点:插件结构多而且复杂,配置起来麻烦.自定义标签需要改写结果集,也就是要改造框架,巨麻烦.无论是使用tag或freemarker
spring
优点,aop的切面开发给事务编程带来了非常大的实惠,配置事务容易
缺点,过度编程,太重细节,配置方式太多样
hiber
优点:把数据转化弄成配置方式,为object关系,到entity的er关系转换带来优势,提供了应用到数据的完整映射. 间接带来soa发展,cacha结构带来实质上的好处,带来实质上的数据访问优化
缺点.还是配置.
hql已经标准化了
59 楼 Angel_Night 2009-12-15  
daquan198163 写道
Angel_Night 写道
archerfrank 写道
action线程不安全也算是缺点么。。。


线程这个地方的确我不是很熟悉

根据我浅薄的线程知识 不要在action中直接定义实例变量 问题就不会很大(不肯定啊)

但是不在action中定义对spring ioc有些不方便...

不知道能否给解释一下 我的线程的确连入门都不好说

如果action是singleton并且定义了可变的实例变量(如某个状态标识),则线程不安全;
这不影响你用spring ioc,因为注入的东西往往也都是datasource、service、dao等,它们都是初始化以后就不会再被改变了,并且它们本身也是可以做到线程安全的。
至于它们如何保证线程安全,道理同上。



哦 原来是这样啊...多谢

相关推荐

    ssh框架优缺点

    ### SSH框架优缺点详解 SSH框架,即Struts + Spring + Hibernate这三种技术的组合,是Java Web开发中非常流行的一种轻量级架构模式。本文将深入探讨SSH框架中的Struts、Spring、Hibernate各自的优缺点。 #### ...

    综合论述SSH的优缺点

    标题“综合论述SSH的优缺点”指的是对Secure Shell(SSH)协议的全面分析,包括它的优点和不足。SSH是一种网络协议,用于安全地远程登录到服务器,执行命令,传输数据,以及在不安全的网络环境中提供加密通信。SSH...

    SSH框架的优缺点

    下面我们将深入探讨SSH框架的优缺点。 **一、Struts2** Struts2是基于MVC设计模式的Web应用框架,它继承了Struts1的优点并解决了其不足。其主要优点包括: 1. **灵活的拦截器机制**:Struts2使用拦截器来处理请求,...

    SSH架构优缺点分析.rar

    本资料详细介绍了SSH架构的优缺点,可作为面试资料备用! 常说的好处 开源 常说的坏处 配置文件过大我就不提了 struts 优点: 收集,验证表单数据相比传统servlet简单 优雅的实现可配置的请求转发 ...

    ssh框架的介绍以及优缺点

    ### SSH框架介绍及其优缺点 #### 一、SSH框架概述 SSH框架是Java Web开发领域中非常流行的一个组合,它由三个独立但又相互协作的部分组成:Struts、Spring 和 Hibernate。这三个技术分别解决了Web应用开发中的不同...

    ssh框架优缺点 struts hibernate spring

    ### SSH框架:Struts、Hibernate、Spring 的优缺点分析 #### Struts **优点:** 1. **MVC模式的支持**:Struts框架遵循MVC(Model-View-Controller)设计模式,它将应用程序分为模型层、视图层和控制器层,这样的...

    ssh架构优缺点(转)

    NULL 博文链接:https://guona329.iteye.com/blog/1597773

    SSH(Spring Struts Hibernate)的优缺点

    让我们详细分析一下SSH的优缺点。 **Struts** Struts作为一个MVC框架,具有以下优点: 1. **MVC架构**:Struts通过分离业务逻辑、视图和控制逻辑,使应用结构清晰,易于维护和扩展。 2. **Taglib库**:Struts提供...

    整理的各种框架的优缺点

    整理的各种框架的优缺点总结哦 希望能帮助到有需要的 童鞋

    Struts,Spring,Hibernate优缺点

    Struts、Spring 和 Hibernate 是Java Web开发中三大主流的开源框架,它们各自有着独特的功能和优缺点。在构建企业级应用程序时,理解这些框架的核心特性以及它们如何相互补充至关重要。 Struts 是一个基于MVC...

    三大框架优缺点

    改文档是一个非常实用的 三大框架解说文档 通过该文档 初学者能更深一步对SSH框架的了解

    FTP服务器优缺点分析.docx

    3. 可通过SSL、SSH2等协议进行加密,增强数据安全性。 4. 使用TCP/IP协议,确保数据准确传输。 5. 对于大文件,FTP传输速度通常比HTTP更快。 FTP服务器种类多样,如Windows系统自带的IIS FTP,功能强大的Serv-U,...

    J2EE三大框架面试的常见问题

    SSH优缺点 1.struts struts框架具有组件的模块化,灵活性和重用性的优点,同时简化了基于MVC的web应用程序的开发。 优点: Struts跟Tomcat、Turbine等诸多Apache项目一样,是开源软件,这是它的一大优点。使开发者...

    框架的优缺点

    本篇文档主要探讨了三大主流框架——Struts1、Struts2和Spring的优缺点,尤其是对SSH(Struts、Spring、Hibernate)框架的理解。 首先,我们来看看Struts2的工作原理。Struts2的核心是FilterDispatcher,它通过一...

    SSH.rar_SSH框架简介_ssh

    下面我们将深入探讨SSH框架的各个方面,包括其优缺点。 **Struts2** 是一个基于MVC设计模式的Web应用框架,它通过简化MVC的实现来帮助开发者创建更结构化的应用程序。Struts2提供了丰富的拦截器和插件机制,使得...

    SSH框架详解

    个人中的SSH详细介绍,包括struts1的工作原理、Struts1优缺点(为什么要用strust1)、struts1的工作原理及基本配置详解、struts2工作原理、struts2运行机制、Struts2的工作流程、Struts2工作原理、Struts1与Struts2...

    SSH2文件上传

    这些协议各有优缺点,选择哪种取决于应用场景的安全性需求、速度和复杂性。 综上所述,SSH2文件上传是通过SSH2协议实现的远程文件传输,涉及连接建立、身份验证、SFTP会话开启、文件传输和验证等多个环节。在实际...

    ssh 框架整合总结

    包括assigned(外部生成)、hilo、seqhilo、increment、identity、sequence、native、uuid.hex、uuid.string和foreign等多种方式,每种都有其适用场景和优缺点。 在处理一对多或多对多关联时,Hibernate可能会出现N...

    strut spring hibernate 优缺点

    ### Struts, Spring, Hibernate 三大框架的优缺点分析 #### Struts框架 **优点:** 1. **组件模块化与灵活性:** Struts框架强调组件的模块化设计,这使得开发者可以根据项目的不同需求灵活地选择和组合这些组件。...

Global site tag (gtag.js) - Google Analytics