模式依赖注入

依赖注入  时间:2021-02-19  阅读:()

模式&框架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理论探索/学习心得/实践经验均可.

Megalayer美国独立服务器配置及性能速度综合评测

Megalayer 商家在之前也有记录过,商家开始只有提供香港站群服务器和独立服务器,后来也有增加到美国独立服务器,以及前几天也有介绍到有增加香港VPS主机。对于香港服务器之前有过评测(Megalayer香港服务器配置一览及E3-1230 8GB服务器评测记录),这里申请到一台美国独立服务器,所以也准备简单的评测记录。目前市场上我们看到很多商家提供VPS或者云服务器基本上没有什么特别的,但是独立服...

NameCheap优惠活动 新注册域名38元

今天上午有网友在群里聊到是不是有新注册域名的海外域名商家的优惠活动。如果我们并非一定要在国外注册域名的话,最近年中促销期间,国内的服务商优惠力度还是比较大的,以前我们可能较多选择海外域名商家注册域名在于海外商家便宜,如今这几年国内的商家价格也不贵的。比如在前一段时间有分享到几个商家的年中活动:1、DNSPOD域名欢购活动 - 提供域名抢购活动、DNS解析折扣、SSL证书活动2、难得再次关注新网商家...

提速啦(24元/月)河南BGP云服务器活动 买一年送一年4核 4G 5M

提速啦的来历提速啦是 网站 本着“良心 便宜 稳定”的初衷 为小白用户避免被坑 由赣州王成璟网络科技有限公司旗下赣州提速啦网络科技有限公司运营 投资1000万人民币 在美国Cera 香港CTG 香港Cera 国内 杭州 宿迁 浙江 赣州 南昌 大连 辽宁 扬州 等地区建立数据中心 正规持有IDC ISP CDN 云牌照 公司。公司购买产品支持3天内退款 超过3天步退款政策。提速啦的市场定位提速啦主...

依赖注入为你推荐
微信对骂群请帮我查一下微信骂人是不是违法的公章制作制作公章尺寸标准大小,字体,字号?直播加速手机上什么软件可以帮助直播加速,大神们推荐推荐godaddy美国GODADDY 域名支持域名别名解析吗?雅虎天盾我机器上有瑞星杀毒和防火墙 我用雅虎天盾来查杀木马怎样?xp系统停止服务XP系统为什么要停止服务?小米手柄小米手柄和飞智手柄哪个好?网站地图制作我想给网站做网站地图不知道怎么做的,请教高手!火狐flash插件崩溃火狐浏览器flash插件崩溃怎么办小米什么时候抢购小米手机抢购时间是什么时候 每周几次??
zpanel debian6 主机合租 网通代理服务器 河南服务器 java虚拟主机 40g硬盘 免费吧 服务器托管什么意思 申请网页 双12 根服务器 德讯 创速 双十二促销 ncp alexa世界排名 神棍节 留言板 华为云服务器宕机 更多