ASP.NET Core分布式项目实战

默认教学计划
948人加入学习
(31人评价)
价格 ¥398.00
教学计划


**0** GitFlow 有Vincenr Driessen 提出的git 软件开发版本管理的流程标准。

**1 主要分支介绍**
![image](http://assets.processon.com/chart_image/5c106cd7e4b0fd4819946923.png)
**maseter分支** 

主分支产品功能全部实现后,在mster分支对外发布。

**develop 分支**

开发分支,基于master分支克隆,产品的编码在此分支进行。

**release 分支**

- 测试分支,基于develop分支克隆。
- 产品功能编码featuren分支提交合并完成后,同步到本分支测试,测试过程的BUG在本分支修复,修复完成打Tasg合并到develop分支。
- 属于临时分支,功能上线后可删除分支。

**bugfix 分支**

- bug 修复分支,基于master分支或者发布的tasg 克隆,用于修复对外发布的分支(线上版本)。
- 修复BUG完成 打Tag后合并到 develop/master 分支。
- 属于临时分支,修改完BUG后可以删除分支。

**feature 分支**
- 功能开发分支,基于develop分支克隆,用于新功能的开发。
- 功能开发完成后合并到develop分支。
- 可以存在多个,属于临时分支,功能完成后可删除。

**2 使用CitFlow有如下几点优势:**

- **并行开发:** 每个新功能都建立新的feature分支,与一家完成的功能隔离。新功能完成开发后,对应的feature分支合并到develop分支。本地开发多个新功能,可以创建多个feature分支,切换开发。
- **协作开发:** 每个feature分支改动的代码只用于某个功能。
- **支持紧急修复**:hotfix分支,从某个已经发布的tag 创建的紧急修复,这会紧急修复值影响已经发布的tag,不会与新开发feature冲突。


**3  开发 示例**

1 从远程仓库克隆代码到本地
```
git clone https://liaowei1992.visualstudio.com/IdentityServer.Samples/_git/IdentityServer.Samples
```

2 基于master 分支 创建develop

[展开全文]

  官方文档 https://identityserver4.readthedocs.io/en/latest/

 

1 IdentityServer4 ASP .NET Core 认证中心 搭建

1.1 新建ASP .NET Core 项目 ```nuget IdentityServer4``` 

1.2 新建配置类 IdentityConfig 

public class IdentityConfig
    {
        /// <summary>
        ///   ApiResource 
        /// </summary>
        /// <returns></returns>
        public static IEnumerable<ApiResource> GetResource()
        {
            return new List<ApiResource>() {
            new ApiResource("UserAPI","OrderAPI"){
            } };
        }
        /// <summary>
        /// Client
        /// </summary>
        /// <returns></returns>
        public static IEnumerable<Client> GetClients()
        {
            var cilentApp = new Client()
            {
                ClientId = "App1",
                ClientName = "App",
                AllowedGrantTypes = new List<string>() {
                    GrantType.ClientCredentials },
                ClientSecrets = new List<Secret>() {
                    new Secret("Sercrect".Sha256())
                },
                AllowedScopes = { "UserAPI"}
            };
            return new List<Client>() {
                    cilentApp
            };
        }
    }

1.3  Startup.cs配置 IdentityServer 

public void ConfigureServices(IServiceCollection services)
        {
            //依赖注入系统中注册IdentityServer
            services.AddIdentityServer()
            //扩展在每次启动时,为令牌签名创建了一个临时密钥。在生成环境需要一个持久化的密钥
                .AddDeveloperSigningCredential()
                .AddInMemoryApiResources(IdentityConfig.GetResource())//Api 资源
                .AddInMemoryClients(IdentityConfig.GetClients());//Api的客户端
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
         
        }
 public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            
            app.UseIdentityServer();//使用服务 中间件被添加到HTTP管道中
        }

1.4 启动站点 输入 ```http://localhost:4000/.well-known/openid-configuration```,可以看到授权的终结点等信息

[展开全文]

领域驱动设计 DDD (Domain Drive Design)
在软件开发的业务知识梳理过程中,必定会形成木个领域知识,根据领域知识一步步驱动软件设计。

 

  • 领域模型(Domain Model):能精确反应领域中某一知识元素的载体。分为实体,值对象,服务。 
  • 值对象(Value Object):没有唯一标识符的实体,在领域模型中是可以被共享的,他们应该是“不可变的”(只读的),当有其他地方需要用到值对象时,可以将它的副本作为参数传递。
  • 实体(Entity):通过一系列连续性(continuity)和标识(identity ID)来定义;
  • 领域服务(Domain Service):当领域中的某个重要过程或转换操作不属于实体或值对象的自然职责时,应该在模型中添加一个作为独立接口的操作,并将其申明为Service
  • 领域事件(Domain Event)
  • 资源库(Repository):负责从存放资源的位置(数据库、内存或者其他 Web 资源)获取、添加、删除或者修改领域对象。
  • 工厂(Factory):把创建对象的细节封装起来,巧妙的实现了依赖反转。
  • 聚合(Aggregate):多个模型单元间的组合,它定义了模型的关系和边界。每个聚合都有一个根,根是一个实体,并且是唯一可被外访问的。聚合是一种边界,它可以封装一到多个实体值对象,并维持该边界范围之内的业务完整性。在聚合中,至少包含一个实体,且只有实体才能作为聚合根(Aggregate Root)
  • 应用服务(Application Service):服务存在的目的就是为领域提供简单的方法。为了提供大量便捷的方法,自然要关联许多领域模型。

    服务具有以下特点:

    a)服务中体现的行为一定是不属于任何实体和值对象的,但它属于领域模型的范围内
    b)服务的行为一定设计其他多个对象
    c)服务的操作是无状态的

[展开全文]

patch 一个api修改多个字段

聚合服务

mediatr 发布订阅

 

[展开全文]

<button name="button" value="yes" class="btn btn-primary"
  autofocus>同意</button>
                <button name="button" value="no" >取消</button>

这两个按钮视频中还有一个属性是type="button",使用这个属性,无论如何点都没反应,去掉这个属性后就可以了

[展开全文]

终于做好了!

Thanks, Jesse!

[展开全文]

user 实体对象添加了属性以后, migration 一直更新不了,报如下错误:

然后再 contex 上添加了如下一句: modelBuilder.Entity<AppUser>().Property(e => e.CityAlias).HasColumnName("CityAlias"); 在进行migration 的新增就成功了,很奇怪。不知道是不是efcore内置什么缓存规则

[展开全文]

Identity:

1 Nuget: IdentityServer4.AspNetIdentity

[展开全文]

http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html

[展开全文]

单元测试:

写不写单元测试,覆盖率是多少

 

 

单元测试和集成测试

(1),单元测试细分

[展开全文]

patch 部分更新

[

{

"op":"replace",   //add,replace

"path":"/FirstName",

"value":"jesse"

},

{

"op":"replace",

"path":"/LastName",

"value":"liu"

}

]

[展开全文]

usercontroller

 

Entity分为三种

Models:数据库

DTO:数据库与UI交互时产生的中间

ViewModels:UI

 

[展开全文]

API:

swagger

xmar

 

 

userprofile用户资料

tagdata标签

BP

 

excel设计

[展开全文]

 

项目发起人:

1.创建项目

2.分享项目

 

好友:

1.访问项目

2.查看项目

3.参与项目

 

投资人(结束方)

财务顾问(中间人)

 

2度好友:

 

[展开全文]

在开始设计之前应该做什么:

1.需求分析,从用户需求第一手资料分析

 

开发的设计:

角色的划分:

用户:APP用户 

登录——添加系统推荐的好友(推荐算法)——添加手机好友或通讯录——好友备注

 

 

获取项目机会:

1,系统推荐项目

2.好友项目

3.二度好友项目

 

访问项目

查看项目

参与项目{中间人,结束方}

 

[展开全文]

 

oAuth2四种模式

详情http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html

[展开全文]

授课教师

程序员

课程特色

下载资料(2)
视频(144)
讨论(1)
图文(2)