首页 文章 精选 留言 我的

精选列表

搜索[认知分析],共10007篇文章
优秀的个人博客,低调大师

(一)docker 认知

1、为什么Docker有价值为什么Docker这么有价值?在回答这个问题之前,我们先想一个相似的问题,为什么阿里巴巴这么有价值? 传统的商业存在两大弊端:一是买卖双方相对分散,加大了需求收集、营销、运输的成本;二是买卖双方信息不对称,对交易产生了抑制作用。 电子商务的出现则将商品从卖方到买方的流通过程变得集中化、标准化、透明化: 集中化:买家足不出户就能从各个商户集中购买商品,卖家根据买家需求集中配货、根据下单情况集中发货。 标准化:买家支付下单—卖家发货—快递包裹—物流运输—买家收货确认,整个流程都是标准化的。 透明化:买家可以在网上浏览商品评价、比较商品价格。买卖双方的信用等级也是完全透明的。 综上所述,可以说阿里巴巴这样的电商带来的最大价值在于降低了商品的社会交易成本。 现在我们把商业发展的逻辑搬到软件交付这里。传统的软件交

优秀的个人博客,低调大师

我对DDD的认知(一)

1 引言 DDD,全名:Domain Driven Design,中文名:领域驱动设计。 2 DDD的分层 分层的架构方式是我们常用的,这里的分层是说n-layer,指的是逻辑的分层,目的是分离职责。常用的是三层:表现层,业务逻辑层,数据访问层。 DDD把原来经典三层(表现层,业务逻辑层,数据访问层)中的业务逻辑层又细分为两层:应用层和领域层。应用层负责领域对象的协调和调度,领域层包含具体的领域对象,领域规则(也就是业务规则),更大限度的实现业务规则的重用和职责的分离。将数据访问层并入基础架构层。变成了四层: Presentation Application Domain Infrastructure。 3 DDD的持久化设计 3.1 三层中的持久化设计 三层模式中的数据持久化是由数据访问层负责的,是至下而上的服务。为什么说是至下而上的呢?因为我们会写下面的代码。 public class Product{ public GuidId { get; set; } public stringName { get; set; } public List< Parameter> Parameters { get; set; } public List< Delivery> Deliverys { get; set; } public List< Image> Images { get; set; } } public class Parameter{ } public class Delivery{ } public class Image{ } public class ProductDAL{ public boolAdd( Productproduct); public boolUpdate( Productproduct); public boolDelete( Productproduct); public ProductGet( Guidid); public List< Product> FindAll(); } 在数据访问层会写上所有针对这个Product的操作,不管需要与否,有时候干脆每张表一个DAL,用工具生成实体和数据访问类,这下数据访问层就完成了,后面可能会根据需要进行修改。管它业务层是否需要呢,反正需要的我都有了,不需要的我也有了,自己组合吧。 这种情况会造成代码浪费,甚至是大量的数据访问代码根本就没有用过。最重要的是也没有根据上层的需求来完成持久化的任务,而是简单的完成了表的增删改查,反正实现业务你就组合吧。总有一种组合会实现你的业务。这也就怪不得别人叫我们增删改查程序员了,因为如果业务简单,正好大部分业务都很简单,那么业务层就就剩下 new ProductDAL().Add( new Product()); 这么一句了。 3.2 DDD的持久化设计 在DDD中,持久化被放在了基础架构层中。基础架构层不仅包括数据持久化,而且包括基础类库,Cross-Cutting等工具。DDD的持久化是至上而下的,是根据DDD的需要进行持久化。持久化的对象也变成了领域对象,而不再是单个表对象。 在领域层定义持久化的接口,持久化的对象是业务对象或者领域对象。在基础架构层实现领域层需要的持久化接口,具体的实现将领域对象持久化到数据存储中,是数据库还是文件,还是其他什么储存设备。一个领域对象是存储在一张表还是分开几张表,甚至是分开几个数据库,都是由基础架构层中的持久化模块来决定的,对领域层屏蔽实现的细节。只是在领域层需要持久化,或者需要反持久化的时候提供领域层需要的对象即可。 4 聚合 在进行面向对象设计的时候,我们会将一些对象进行组合,组合成为新的对象。随着系统的复杂,很容易造成对象的关系也复杂起来,对象的关系真的变成了错综负责的网状。 DDD提出的聚合可以解决这个问题,用来减少对象之间的关联关系。有聚合就有聚合根的概念,要不然就没有终点,还是会变成网状。我理解的聚合根,就是一个聚合的终点。聚合也可以理解为一系列对象,他们的关系好像树形,需要一个根节点来表达这一系列的对象。 4.1 如何发现聚合 那么如何来发现一个聚合呢?通过下面的一个小例子,我们来说明一下。 比如我们的场景是一个电子商务网站,需要定义一个商品类,商品肯定会有参数,图片,配送地域这些附属信息。我们一般会定义下面的类结构 public class Product{ public GuidId { get; set; } public stringName { get; set; } public List< Parameter> Parameters { get; set; } public List< Delivery> Deliverys { get; set; } public List< Image> Images { get; set; } } public class Parameter{ } public class Delivery{ } public class Image{ } 其实这时候Product,Parameter,Delivery,Image就是一个聚合,Product就是这个聚合的根。因为Parameter,Delivery,Image这些概念脱离了Product是没有意义的,他们都是一个商品的附属信息,单独的谈论一张图片和一个参数没有任何意义。应该是从一个Product出发,然后引出来这个Product的参数,配送,图片,这样才比较合理。所以他们几个概念是一个聚合。 结束 今天我们就理解到这里,明后天我们再继续!!! 本文转自 virusswb 51CTO博客,原文链接:http://blog.51cto.com/virusswb/537258,如需转载请自行联系原作者

优秀的个人博客,低调大师

关于Openstack的浅层次认知

Openstack浅析 英文好的应该直接跳到官方文档去看相关的介绍,下面是具体介绍的连接,包括Openstack的详细架构: http://docs.openstack.org/kilo/install-guide/install/zypper/content/ch_overview.html 如果懒得翻译请看我慢慢描述我所理解的Openstack,以及对比我们目前所用到的、理解的Openstack。 Openstack的一些误区 1、很多人包括我期初对Openstack的理解,认为Openstack等同于VMare是一个虚拟机,主要做虚拟化用的,可以替代VMare。这句话极其错误,因为Openstack早期是基于KVM开发的虚拟机管理程序,所以默认会支持KVM,后续的Openstack也支持VMare进行虚拟机管理,如果用FuelMaster安装的时候我们会发现里面是有VMare选项的。也就是说Openstack的虚拟机实例功能最终还是依赖于第三方介质来实现,那这个介质我们可以使用默认的KVM以及后期添加的VMare等等。记住Openstack不完全等于VMarwe,不是实现虚拟化的为主要目的,虚拟化由第三方虚拟机管理程序实现,他主要是做云计算的。如果要单纯做虚拟化VMare是业界内足够强悍的工具,它经得起考验。 2、Openstack的存储swift。大家可能会以为是不是我只有安装了Openstack才能使用swift以及cinder块存储。实际上并不是这样,swift是Openspace贡献给Openstack的东西实际上我们可以单独部署swift,配合Openstack的身份认证系统Keystone就可以搭建出一套带身份认证的存储系统,只不过和传统的http上传下载文件不同的方式是.我们必须通过 http://developer.openstack.org/api-ref-objectstorage-v1.htmlOpenstack官方提供的swiftAPI http://developer.openstack.org/api-ref-blockstorage-v1.htmlOpenstack官方提供的cinder块存储API进行文件访问,这种场合似乎更适合服务期间存储。不适合前端用户后端交互式存储.永远避免不了一次中间层转存操作。我们完全可以单独用它不安装Openstack。 3、Openstack部署复杂度? Openstack部署其实并没有很复杂的样子,的确如果有足够的耐心,可以手动部署Nova-Compute、Neutron等等,但是这样会很麻烦效率会很低下。好在有一个现成的快速部署方案就是之前提到过的FuelMaster,这是一个CentOS系统.安装之后提供Dashboard进行后台操作,可以在没有CLI的情况下进行节点部署镜像发现以及实例创建,所以Opentack的部署并不是一个很难的工作,至多麻烦一点,需要略懂网络组成原理,配置一下网络。Fuel的介绍如下,有适当Linux操作的同志入手起来不是特别困难的事情。 https://wiki.openstack.org/wiki/Fuel 4、Openstack开发一定要用Python开发? Openstack相关组件提供了C/C++phppythonjavagolangrubynode.js等等语言的开发包,不会绑死在Python,虽然swift存储使用python开发的但是,至于接口协议栈都有不同的语言实现,开发门槛很低。 5、用了Openstack各种性能抗压能力就提高了? 这一点无从考究,现有的资料都是来自网上没有实战过并不知道他所能达到一个什么样的效果,结合了KVM等虚拟机管理程序的Openstack在面临负载的时候性能如何,我感觉很少有人这么去做,至少在我们的项目中似乎不是很明显,但是至少有一点可以说明合适的场景用合适的手段来解决问题就足够。 下图就有高可用Opesntack部署方式。 最好的方式理解Openstack全部功能就是打开 https://ecs-buy.aliyun.com/#/postpay阿里云弹性服务器页面,Openstack所能达到的就是这个层次,不知道和我们的用途是否一致呢。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册