模式&框架Pattern&Framework*InstituteofComputerSoftwareNanjingUniversity*摘要MoreaboutPatternFrameworkComparison*InstituteofComputerSoftwareNanjingUniversity*摘要MoreaboutPatternFrameworkComparison*InstituteofComputerSoftwareNanjingUniversity*MoreaboutPatternPatternsofPatternsAnti-patternJ2EEpatterns*InstituteofComputerSoftwareNanjingUniversity*MoreaboutPatternPatternsofPatternsAnti-patternJ2EEpatterns*InstituteofComputerSoftwareNanjingUniversity*WorkingtogetherPatternsareoftenusedtogetherandcombinedwiththesamedesignsolution.
Acompoundpatterncombinestwoormorepatternsintoasolutionthatsolvesarecurringorgeneralproblem.
*InstituteofComputerSoftwareNanjingUniversity*Example:设计一个文档编辑器设计问题文档结构格式化修饰用户界面支持多种视感(look-and-feel)标准支持多种窗口系统用户操作拼写检查和连字符*InstituteofComputerSoftwareNanjingUniversity*使用设计模式Composite表示文档的物理结构:递归组合Strategy允许不同的格式化算法Decorator修饰用户界面AbstractFactory支持多视感标准Bridge允许多个窗口平台Command支持撤销用户操作Iterator访问和遍历对象结构Visitor允许无限扩充分析能力而又不会使文档结构的实现复杂化*InstituteofComputerSoftwareNanjingUniversity*DuckExampleStartwithabunchofQuackables.
.
AgoosecamealongandwantedtoactlikeaQuakabletoo.
Then,theQuackologistsdecidedtheywantedtocountquacks.
ButtheQuackologistswereworriedthey'dforgettoaddtheQuackCounterdecorator.
Wehadmanagementproblemskeepingtrackofallthoseducksandgeeseandquackables.
TheQuackologistsalsowantedtobenotifiedwhenanyquackablequacked.
*InstituteofComputerSoftwareNanjingUniversity*AdapterDecoratorAbstractfactoryCompositeIteratorObserverCompoundPatternsMVCasongaboutMVCbyJamesDempsey(lyrics)*InstituteofComputerSoftwareNanjingUniversity*MVCMVCisacompoundpatternconsistingoftheObserver(model),Strategy(controller)andComposite(view)patterns.
TheAdapterpatterncanbeusedtoadaptanewmodeltoanexistingviewandcontroller.
*InstituteofComputerSoftwareNanjingUniversity*PatternDefinitionReviewAPatternisasolutiontoaprobleminacontext.
Context:therecurringsituationinwhichthepatternappliesProblem:thegoalyouaretryingtoachieveinthiscontextandanyconstrainsthatoccurinthecontext.
Solution:ageneraldesignthatanyonecanapplywhichresolvesthegoalandsetofconstraints*InstituteofComputerSoftwareNanjingUniversity*PatternCategoriesI--GoalCreationalPatterns:involveobjectinstantiationandallprovideawaytodecoupleaclientfromtheobjectsitneedstoinstantiate.
StructuralPatterns:composeclassesorobjectsintolargerstructures.
BehavioralPatterns:concernedwithhowclassesandobjectsinteractanddistributeresponsibility*InstituteofComputerSoftwareNanjingUniversity*PatternCategoriesII--ScopeClassPatternsDescribehowrelationshipsbetweenclassesaredefinedviainheritance.
Relationshipsinclasspatternsareestablishedatcompiletime.
*InstituteofComputerSoftwareNanjingUniversity*TemplateMethodInterpreterAdapterFactoryMethodPatternCategoriesII--ScopeObjectPatternsDescriberelationshipsbetweenobjectsandareprimarilydefinedbycomposition.
Relationshipsinobjectpatternsaretypicallycreatedatruntimeandaremoredynamicandflexible*InstituteofComputerSoftwareNanjingUniversity*CompositeDecoratorVisitorCommandIteratorMementoProxyFacadeChainofResponsibilityObserverBuilderSingletonPrototypeFlyweightStateMediatorBridgeAbstractFactoryStrategyMoreaboutPatternPatternsofPatternsAnti-patternJ2EEpatterns*InstituteofComputerSoftwareNanjingUniversity*Anti-PatternsAndrewKoenig1995,MichaelAkroyd1996Ananti-pattern(反面模式)tellsyouhowtogofromaproblemtoaBADsolution.
Tellyouwhyabadsolutionisattractive.
Tellyouwhythatsolutioninthelongtermisbad.
Suggestotherpatternsthatareapplicablewhichmayprovidegoodsolutions.
*InstituteofComputerSoftwareNanjingUniversity*Wiki反面模式分类组织结构的反面模式项目管理的反面模式团队管理的反面模式分析方式的反面模式一般设计上的反模式面向对象设计的反面模式编程上的反模式方法学上的反面模式测试反面模式配置管理反面模式*InstituteofComputerSoftwareNanjingUniversity*AnemicDomainModelBaseBeanCallsuperCircle-ellipseproblemEmptysubclassfailureGodobjectObjectcesspoolObjectorgyPoltergeistsSequentialcouplingSingletonitiesYetanotherfuckinglayerYo-yoproblemExample胖球反模式通过描述一个或几个类不断的膨胀,以至吞食掉整个面向对象架构.
一般胖球的出现是由于一个类垄断了处理过程,而其他的类只是数据的封装体.
症状和后果单个类拥有大量的属性或操作.
单个类中封装了异类的、不相关的属性和操作集.
单个控制器类和几个简单的数据对象联系在一起.
缺乏面向对象的设计,一个控制器类几乎封装了所有的应用功能.
控制器类通常过于复杂,无法复用和测试.
把这么个大类加载如内存中的代价可能会很高.
胖球反模式有两种形式:行为形式和数据形式.
*InstituteofComputerSoftwareNanjingUniversity*Example如何重构(Refactor)把一些行为重新分配到某些封装了数据的对象上,并对对象之间的关系重新调整.
确定代表契约的关系操作和属性集合,也就是把相关的属性和方法归类.
寻找这些根据契约的到了集合的"自然的家",并把它们迁移过去.
移除所有的"远耦合"或者说冗余的、间接的联系.
最后,移除所有的瞬时联系.
总之,把一个控制器类变成了一个协调器类,让开始的数据类扩充一些处理逻辑,数据类在协调类的指导下进行操作,这也只是职责的迁移.
*InstituteofComputerSoftwareNanjingUniversity*MoreaboutPatternPatternsofPatternsAnti-patternJ2EEpatterns*InstituteofComputerSoftwareNanjingUniversity*J2EEPatterns特点与平台、语言相关,描述的是J2EE平台上利用Java如何解决设计问题所解决问题的规模较大,在J2EE框架的基础上解决构件技术的选择、构件之间的协作等问题模式抽象层次较高,同时提供了若干具体实现的细节,称为策略.
注重性能的优化*InstituteofComputerSoftwareNanjingUniversity*J2EEPatternsClassification根据来源分为SJC设计模式和TheServerSide设计模式两大类J2EE:JSP,Servlet,EJB,JMS,JDBC,JNDISJC(SunJavaCenter)设计模式Web层模式:JSP,ServletInterceptingFilter,FrontController,ViewHelper…业务层模式:EJBBusinessDelegate,ValueObject,SessionFaade…集成层模式:JMS,JDBCDataAccessObject,ServiceActivator**J2EEPatternsClassificationTheServerSide设计模式EJB层体系结构模式SessionFaade,MessageFaade,EJBCommand…层间数据传输模式DataTransferObject,DataTransferHashMap…事务与持久性模式VersionNumber,JDBCforReading…客户端EJB交互模式EJBHomeFactory,BusinessDelegate*InstituteofComputerSoftwareNanjingUniversity*ExampleEJB调用是工厂模式的实现调用EJB语法:EJBHomeem=JNDIServer.
getRemoteHome(EJB-JNDI-NAME);EJBObjectmyEJB=em.
create();em.
create()类似Afactory.
create();EJBObject是接口*InstituteofComputerSoftwareNanjingUniversity*Example会话Bean和实体Bean:Faade模式一个会话Bean中调用多个实体Bean该会话Bean是一个Faade类/Manager类使用Faade会话Bean优点:提供性能,节省客户端直接调用实体Bean的网络开销解耦分层,利于扩展变化.
*InstituteofComputerSoftwareNanjingUniversity*ExampleDTO(DataTransferObject)模式DTO模式是指将数据封装成普通的JavaBeans,在J2EE多个层次之间传输.
DTO类似信使,是同步系统中的Message该JavaBeans可以是一个数据模型Model*InstituteofComputerSoftwareNanjingUniversity*ExampleMVC模式MVC模式是J2EEWeb层的主要实现*InstituteofComputerSoftwareNanjingUniversity*ExampleProxy模式代理模式可以强迫客户端对一个对象的方法调用间接通过代理类进行.
通常代理模式有以下几种:访问代理(AccessProxy)、虚拟代理和远程代理等.
动态Proxy模式动态代理利用Java的反射(Reflect)机制,可以在运行时刻将一个对象实例的方法调用分派到另外一个对象实例的调用.
动态代理模式可以在运行时刻创建继承某个接口的类型安全的代理对象,而无需在代码编译时编译这些代理类代码.
*InstituteofComputerSoftwareNanjingUniversity*J2EEAnti-Pattern无EJB不叫J2EE过度分层频繁的往返调用过度使用有状态的SessionBean过度会话万能Servlet或者万能JSP*InstituteofComputerSoftwareNanjingUniversity*Now…OODesignToolboxOOBasicsOOPrinciplesOOPatternsYourpatternshere!
*InstituteofComputerSoftwareNanjingUniversity*摘要MoreaboutPatternFramework:why,what,howComparison*InstituteofComputerSoftwareNanjingUniversity*Formsofdesign-levelreuseSharingofconsistency:programmingandscriptinglanguageSharingconcretesolutionfragments:librariesSharingcontracts:interfacesSharingindividualarchitecture:patternsSharingsubsystemarchitectures:frameworksSharingoverallstructure:systemarchitectures.
*InstituteofComputerSoftwareNanjingUniversity*Framework[GoF]:Aframeworkisasetofcooperatingclasses,someofwhichmaybeabstract,thatmakeupareusabledesignforaspecificclassofsoftware.
Asoftwareframeworkisanabstractioninwhichcommoncodeprovidinggenericfunctionalitycanbeselectivelyoverriddenorspecializedbyusercode,thusprovidingspecificfunctionality.
Frameworksareaspecialcaseofsoftwarelibrariesinthattheyarereusableabstractionsofcodewrappedinawell-definedAPI,yettheycontainsomekeydistinguishingfeaturesthatseparatethemfromnormallibraries.
*InstituteofComputerSoftwareNanjingUniversity*Framework框架,其实就是某种应用的半成品,就是一组组件,供你选用完成你自己的系统.
简单说就是使用别人搭好的舞台,你来做表演.
而且,框架一般是成熟的,不断升级的软件.
框架一般处在低层应用平台(如J2EE)和高层业务逻辑之间的中间层.
*InstituteofComputerSoftwareNanjingUniversity*Framework*InstituteofComputerSoftwareNanjingUniversity*应用程序专业领域框架一般性应用框架支持性框架作业系统应用框架FrameworkFirstcommercialapplicationframework:MacAppbyAppleComputerforMacintoshWell-knownframeworksMFCStruts,Spring,Avalon,PicoContainerHibernateJdon…*InstituteofComputerSoftwareNanjingUniversity*Framework特点Inversionofcontrol-Theoverallprogram'sflowofcontrolisnotdictatedbythecaller,butbytheframework.
Defaultbehavior-Aframeworkhasadefaultbehavior.
Thisdefaultbehaviormustactuallybesomeusefulbehaviorandnotaseriesofno-ops.
Extensibility-Aframeworkcanbeextendedbytheuserusuallybyselectiveoverridingorspecializedbyusercodeprovidingspecificfunctionality.
Non-modifiableframeworkcode-Theframeworkcode,ingeneral,isnotallowedtobemodified.
Userscanextendtheframework,butnotmodifyitscode.
*InstituteofComputerSoftwareNanjingUniversity*Howtodesignagoodframework领域驱动设计(DomainDrivenDesign)控制反转IoC(InversionofControl)or依赖注入DI(DependenceInjection)AOP(AspectOrientedProgramming)……*InstituteofComputerSoftwareNanjingUniversity*DomainDrivenDesign简称DDDhttp://domaindrivendesign.
org/Thepremiseofdomain-drivendesignistwo-fold:Formostsoftwareprojects,theprimaryfocusshouldbeonthedomainanddomainlogic;andComplexdomaindesignsshouldbebasedonamodel.
*InstituteofComputerSoftwareNanjingUniversity*DDDBackground开始有人抱怨使用Java开发Web网站系统,类似大炮轰蚊子.
"RubyonRails(RoR)是Web系统主打选择"对Java世界提出冲击和挑战.
但是使用另外一种语言有其他陷阱.
对Java世界提出:吸取DDD框架(RoR)优点,真正简化Java企业系统开发,不能打着简化反简化,不能因为IoC/AOP导致复杂化.
*InstituteofComputerSoftwareNanjingUniversity*DDDDomain-drivendesignisnotatechnologyoramethodology.
Itisawayofthinkingandasetofpriorities,aimedatacceleratingsoftwareprojectsthathavetodealwithcomplicateddomains.
*InstituteofComputerSoftwareNanjingUniversity*大师说DDD*InstituteofComputerSoftwareNanjingUniversity*DDD核心思想:面向领域模型(DomainModel)编程,尽可能减少层次之间混乱调用,化多层编码为多层配置,提供多层编码中各层的缺省实现前提:不能丧失多层结构,否则返回Delphi/VB时代;保证多层之间的松耦合.
*InstituteofComputerSoftwareNanjingUniversity*DDD特点统一语言:一个无处不在(ubiquitous)的语言,项目中所有人统一交流的语言.
减少沟通疑惑,减少传达走样.
使得软件更加适合需求.
统一领域模型:领域专家和程序员统一使用一种模型,没有数据库数据表等专业软件技术干扰.
专门的业务领域层:领域层除了业务没有其他,没有软件架构框架等等底层技术.
以模型为核心的卫星图DomainModelDomainServiceLoggingGUIPersistence坏设计之一:失血模型尽管使用MVC模式和框架,但是将大部分业务逻辑写在控制器Controller中,如Struts的Action.
甚至一个Action有几千行.
尽管使用SOA的服务,但是将大部分业务逻辑写在服务中.
在上面两种设计中,模型是只有setter/getter方法失血模型.
模型对象成了纯粹的数据包装,没有业务行为和方法.
失血模型导致软件难于拓展和维护,重新回到面向过程的编程老思路.
随着时间推移,开发效率降低.
坏设计之二:基于数据表的设计最初订单有OrderItemId,OrderId,ProductId和Qty.
后来添加MinDeliveryQty和PendingQty字段,这是和订单交货有关.
订单和订单交货是两个概念,但是我们把这些字段都混合在一个类中了.
尽管采取了OO设计,但这还是一种带有数据库设计影子的坏设计.
DDD设计:将实体的职责分离到不同限定场景.
领域设计和数据库设计不同领域不是把实体看成铁板一块,一开始就把它分解到各种场景.
下订单和订单交货交付是两个场景,它们应该有彼此独立的接口,由实体来实现.
在数据库中它们是一个,也就是说,从ER模型上看,它们是一个整体,但是从domainmodel领域模型角度看,它们是分离的.
DDDadvantage左图:跨层混乱;右图:以Model为线索有条理*InstituteofComputerSoftwareNanjingUniversity*以JdonFramework(JF)为例DomainModel是JF系统的第一个设计开发对象.
每个Model都必须有一个主键;或唯一标识.
由DomainModel延伸界面模型和持久实体.
*InstituteofComputerSoftwareNanjingUniversity*以Domain为核心http://www.
jdon.
com/jdonframework/基于JF的DDD最佳实践*InstituteofComputerSoftwareNanjingUniversity*ModelConfiguration使用配置替代传统MVC模式Controller编码:*InstituteofComputerSoftwareNanjingUniversity*IoC控制反转InversionofControlReviewDesignPrinciples:DIP(dependenceinversion)HollywoodPrinciple:Don'tcallus,we'llcallyou.
依赖注入DependenceInjection(byMartinFowler)http://www.
martinfowler.
com/articles/injection.
html*InstituteofComputerSoftwareNanjingUniversity*IoCMotivationFirstWeknewfrombasicJavatutorial,thatallobjectsshouldbecreatedfirstbeforeuse.
ThenWeknewhowtocreateobjectsbyusageoffactorypatterns.
NowWewillstudyhowtogetanobjectfromanIoCcontaineranduseitwithoutcreatingitbyourselves.
*InstituteofComputerSoftwareNanjingUniversity*abc=newABC()abc=Factory.
createInstanceOfABC()Example*InstituteofComputerSoftwareNanjingUniversity*publicclassJDBCDataManger{publicvoidaccessData(){DataSourcedataSource=newDataSource();//accessdata.
.
.
}}publicclassJDBCDataManger{publicvoidaccessData(){DataSourcedataSource=ApplciationResources.
getDataSource();//accessdata.
.
.
}}Ineithercase,theJDBCDataManagerhastofetchtheDataSourceitself!
http://today.
java.
net/pub/a/today/2004/02/10/ioc.
htmlIoCMotivation应用控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的引用,传递给它.
也可以说,依赖被注入到对象中.
所以,控制反转是,关于一个对象如何获取它所依赖的对象的引用,这个责任的反转.
*InstituteofComputerSoftwareNanjingUniversity*IoCApproachIInterfaceInjection/ContextualizedDependencyLookup(Type1)componentsimplementspecificinterfacesprovidedbytheircontainersinordertobeconfigured**importorg.
apache.
avalon.
framework.
*;publicclassJDBCDataMangerimplementsServiceable{DataSourcedataSource;publicvoidservice(ServiceManagersm)throwsServiceExceptiondataSource=(DataSource)sm.
lookup("dataSource"publicvoidgetData(usedataSourceforsomething}}Therequirementtoimplementspecificinterfacescangivecodea"bloated"feel,whileatthesametimecouplingyourapplicationcodetotheunderlyingframework.
AvalonIoCApproachIISetterInjection(Type2)someexternalmetadataisusedtoresolvedependencies.
*InstituteofComputerSoftwareNanjingUniversity*publicclassJDBCDataManger{privateDataSourcedataSource;publicvoidsetDataManager(DataSourcedataSource{this.
dataSource=dataSource;}publicvoidgetData(usedataSourceforsomething}}Lookslikeanormalbean!
SpringIoCApproachIIMetadata:takestheformofanXMLconfigurationfileinSpring.
*InstituteofComputerSoftwareNanjingUniversity*com.
mydb.
jdbc.
Driverjdbc:mydb://server:port/mydbrootMetadatacanbereusedbymultiplecomponents!
IoCApproachIIdefineaninstanceofourmanagerandpassinareferencetothedatasource*InstituteofComputerSoftwareNanjingUniversity*Makeunittesteasier!
Applicationcodeisnottiedtothecontainer.
Potentialdownsides:Componentrelationshipunclear;EncapsulationbrokenIoCApproachIIIConstructorInjection(Type3)Basedontheprincipleof"GoodCitizen"Registeranobjectwiththeframework,specifytheparameterstouse(whichcaninturnbecreatedbytheframeworkitself)andthenjustrequestaninstance.
Thecomponentsbeingregisteredjusthavetoimplementaconstructor,whichcanbeusedtoinjectthedependencies.
*InstituteofComputerSoftwareNanjingUniversity*IoCApproachIIINeedaconstructor*InstituteofComputerSoftwareNanjingUniversity*publicclassJDBCDataManger{privateDataSourcedataSource;publicJDBCDataManger(DataSourcedataSource){this.
dataSource=dataSource;}publicvoidgetData(usedataSourceforsomething}}IoCApproachIII//createadatasourcebeanBasicDataSourcedataSource=newBasicDataSource();dataSource.
setDriverClassName("com.
mydb.
jdbc.
Driver");dataSource.
setUrl("jdbc:mysql://localhost:3306/mydb");dataSource.
setUsername("Bob");//createthecontainerMutablePicoContainerpico=newDefaultPicoContainer();//registercomponentswithcontainerConstantParameterdataSourceParam=newConstantParameter(dataSource);Stringkey="DataManager";Parameter[]params={dataSourceParam};//NoweachrequestforaDataManagerwillinstantiateaJDBCDataManagerobjectwithourdefined//dataSourceobjectpico.
registerComponentImplementation(key,JDBCDataManger.
class,params);*PicoContainerUseold-fashionedJavacodetoglueeverythingIoCApproachIIITogetinstancesoftheJDBCDataManagerobject,wejusthavetoreferencetheclassbyitskey:*InstituteofComputerSoftwareNanjingUniversity*JDBCDataMangerdm=(JDBCDataManger)pico.
getComponentInstance(key);Applicationcodeisindependentoftheframeworkitself;onlyaconstructorisneeded.
Potentialdownsides:usingconstructorstomaintainthedependenciescanbecomemorecomplexwhenusinginheritanceComparison*InstituteofComputerSoftwareNanjingUniversity*Type1从JNDI或ServiceManager等获得被调用者1.
EJB/J2EE2.
AvalonType2使用JavaBeans的setter方法1.
SpringFramework,2.
WebWork/XWorkType3在构造方法中实现依赖1.
PicoContainer,2.
HiveMind思考题:比较三种IoC方法的优缺点IoCTimeline*InstituteofComputerSoftwareNanjingUniversity*Springvs.
PicoContainerDifferentworkrequiredtosetupyourIoCbindingsSpringcanbeconfiguredeitherbyanXMLconfigurationfileordirectlyinJavaPicoContainerrequiresaJavabindingBotharefairly"lightweight"frameworkPicoContainerissmallerSpringisnotjustanIoCframework:italsoprovideswebapplicationandAOPframeworks,aswellassomegeneralsupportclasses*InstituteofComputerSoftwareNanjingUniversity*Aspect-OrientedProgrammingSeparationofConcernsCrosscuttingConcernsAspectsWeaving*InstituteofComputerSoftwareNanjingUniversity*Aspect-OrientedProgrammingComplexityofenterprisesoftwaresystemsJBoss4.
0正是使用AOP框架进行开发.
具体功能如下:Authentication权限Caching缓存Contextpassing内容传递Errorhandling错误处理Lazyloading懒加载Debugging调试logging,tracing,profilingandmonitoring记录跟踪优化校准Performanceoptimization性能优化Persistence持久化Resourcepooling资源池Synchronization同步Transactions事务*InstituteofComputerSoftwareNanjingUniversity*摘要MoreaboutPatternFramework:why,what,howComparison*InstituteofComputerSoftwareNanjingUniversity*Comparison不同的研究领域设计模式研究的是一个设计问题的解决方法框架是一个应用体系结构,是一种或多种设计模式和代码的混合体统一的思想设计可以被重用*InstituteofComputerSoftwareNanjingUniversity*Comparison设计模式比框架更抽象设计模式在每一次被复用时,都需要被实现框架不仅能被学习,还能被直接执行和复用设计模式是比框架更小的体系结构元素一个典型的框架往往包含了多个设计模式,反之不然框架比设计模式更加特例化框架总是针对一个特定的应用领域框架是OO系统获得最大复用的方式,较大的OO应用将会由多层彼此合作的框架组成*InstituteofComputerSoftwareNanjingUniversity*Comparison框架是软件,而设计模式是软件的知识体,提升框架的设计水平*InstituteofComputerSoftwareNanjingUniversity*MoreComparison框架vs.
应用系统框架vs.
工具箱,类库框架vs.
软件体系结构…*InstituteofComputerSoftwareNanjingUniversity*作业(本次作业不用提交)查询"容器(container)"的定义,谈谈你对"容器"的理解,思考"容器"和"框架"的关系结合实习项目,研究Spring中是怎么体现IoC的Ref对做课堂Presentation感兴趣的同学请发email给我,OO理论探索/学习心得/实践经验均可.
乐凝网络怎么样?乐凝网络是一家新兴的云服务器商家,目前主要提供香港CN2 GIA、美国CUVIP、美国CERA、日本东京CN2等云服务器及云挂机宝等服务。乐凝网络提供比同行更多的售后服务,让您在使用过程中更加省心,使用零云服务器,可免费享受超过50项运维服务,1分钟内极速响应,平均20分钟内解决运维问题,助您无忧上云。目前,香港HKBN/美国cera云服务器,低至9.88元/月起,支持24小时无理...
RAKsmart 商家从原本只有专注于独立服务器后看到产品线比较单薄,后来陆续有增加站群服务器、高防服务器、VPS主机,以及现在也有在新增云服务器、裸机云服务器等等。机房也有增加到拥有洛杉矶、圣何塞、日本、韩国、中国香港等多个机房。在年前也有介绍到RAKsmart商家有提供年付129元的云服务器套餐,年后我们看到居然再次刷新年付云服务器低价格。我们看到云服务器低至年79元,如果有需要便宜云服务器的...
亚洲云Asiayun怎么样?亚洲云成立于2021年,隶属于上海玥悠悠云计算有限公司(Yyyisp),是一家新国人IDC商家,且正规持证IDC/ISP/CDN,商家主要提供数据中心基础服务、互联网业务解决方案,及专属服务器租用、云服务器、云虚拟主机、专属服务器托管、带宽租用等产品和服务。Asiayun提供源自大陆、香港、韩国和美国等地骨干级机房优质资源,包括BGP国际多线网络,CN2点对点直连带宽以...