摘要: Apworks框架实战(一):Apworks到底是什么? Apworks框架实战(二):开始使用 Apworks框架实战(三):单元测试与持续集成 Apworks框架实战(四):使用Visual Studio开发面向经典分层架构的应用程序:从EasyMemo案例开始 Apworks框架实战(五):EasyMemo的领域模型设计 Apworks框架实战(... 阅读全文
posted @ 2015-10-03 21:08 dax.net 阅读(10734) 评论(11) 推荐(9) 编辑
摘要: 为了便于阅读,我将该系列文章汇总于此,欢迎广大软件架构设计和领域驱动设计(DDD)的爱好者翻阅。此处的文章排序是根据整个项目的架构分层来的:首先是与基础结构层(Infrastructure)相关的话题,然后是领域层(Domain),再是应用层(Application)和表示层(Presentation)。因此不一定会按文章发表的时间顺序而来。 深度剖析Byteart Retail案例:前言... 阅读全文
posted @ 2013-01-05 15:49 dax.net 阅读(9387) 评论(32) 推荐(8) 编辑
摘要: 今天抽空将我写的与领域驱动设计有关的系列文章汇总于此,便于大家查看。根据撰写的进度,本列表会不定期更新,敬请关注! Entity Framework之领域驱动设计实践 EntityFramework之领域驱动设计实践 - 前言 EntityFramework之领域驱动设计实践 (一):从DataTable到EntityObject EntityFramework之领域驱动设计实践 (二):分... 阅读全文
posted @ 2010-11-02 17:39 dax.net 阅读(65062) 评论(74) 推荐(124) 编辑
摘要: 小的时候就看到有同学使用C语言在DOS下做过一款俄罗斯方块的游戏,当时是启用了DOS的图形化模式,感觉也挺有意思。最近上海疫情封控在家,周末也稍微有点空余时间,于是使用Visual Studio 2019,C# 9.0配合MonoGame 3.8,自己也写了一个俄罗斯方块的游戏,效果如下: 当然,光 阅读全文
posted @ 2022-05-29 16:09 dax.net 阅读(4266) 评论(8) 推荐(31) 编辑
摘要: 何时使用领域驱动设计?其实当你的应用程序架构设计是面向业务的时候,你已经开始使用领域驱动设计了。领域驱动设计既不是架构风格(Architecture Style),也不是架构模式(Architecture Pattern),它也不是一种软件开发方法论,所以,是否应该使用领域驱动设计,以及什么时候使用 阅读全文
posted @ 2021-08-24 21:02 dax.net 阅读(5039) 评论(12) 推荐(48) 编辑
摘要: 在大数据处理和人工智能时代,数据工厂(Data Factory)无疑是一个非常重要的大数据处理平台。市面上也有成熟的相关产品,比如Azure Data Factory,不仅功能强大,而且依托微软的云计算平台Azure,为大数据处理提供了强大的计算能力,让大数据处理变得更为稳定高效。由于工作中我的项目 阅读全文
posted @ 2021-08-22 20:08 dax.net 阅读(1257) 评论(2) 推荐(7) 编辑
摘要: Visual C# 8.0中引入了可空引用类型(Nullable reference type),通过编译器提供的强大功能,帮助开发人员尽可能地规避由空引用带来的代码问题。这里我大致介绍一下可空引用类型的基本内容。 刚开始接触这个语言特性的时候,可能会不太容易理解。引用类型本来不就是可以为空(nul 阅读全文
posted @ 2021-03-16 21:34 dax.net 阅读(3731) 评论(2) 推荐(14) 编辑
摘要: 在《Kubernetes中分布式存储Rook-Ceph部署快速演练》文章中,我快速介绍了Kubernetes中分布式存储Rook-Ceph的部署过程,这里介绍如何在部署于Kubernetes的ASP.NET Core MVC的应用程序中使用Rook-Ceph所创建的存储对象。 构建ASP.NET C 阅读全文
posted @ 2021-02-26 09:53 dax.net 阅读(686) 评论(0) 推荐(1) 编辑
摘要: 最近在项目中有涉及到Kubernetes的分布式存储部分的内容,也抽空多了解了一些。项目主要基于Rook-Ceph运行,考虑到Rook-Ceph部署也不那么简单,官方文档的步骤起点也不算低,因此,在整合官方文档的某些步骤的基础上,写篇文章简单总结一下。 Rook-Ceph是Kubernetes中分布 阅读全文
posted @ 2021-02-25 20:59 dax.net 阅读(2917) 评论(0) 推荐(0) 编辑
摘要: 在上一讲中,我们已经完成了一个完整的案例,在这个案例中,我们可以通过Angular单页面应用(SPA)进行登录,然后通过后端的Ocelot API网关整合IdentityServer4完成身份认证。在本讲中,我们会讨论在当前这种架构的应用程序中,如何完成用户授权。 回顾 《Angular SPA基于 阅读全文
posted @ 2020-05-24 16:54 dax.net 阅读(1242) 评论(3) 推荐(3) 编辑
摘要: 在前面两篇文章中,我介绍了基于IdentityServer4的一个Identity Service的实现,并且实现了一个Weather API和基于Ocelot的API网关,然后实现了通过Ocelot API网关整合Identity Service做身份认证的API请求。今天,我们进入前端开发,设计 阅读全文
posted @ 2020-03-14 11:22 dax.net 阅读(721) 评论(0) 推荐(0) 编辑
摘要: 上文已经介绍了Identity Service的实现过程。今天我们继续,实现一个简单的Weather API和一个基于Ocelot的API网关。 回顾 《Angular SPA基于Ocelot API网关与IdentityServer4的身份认证与授权(一)》 Weather API Weather 阅读全文
posted @ 2020-03-01 14:29 dax.net 阅读(659) 评论(0) 推荐(0) 编辑
摘要: 好吧,这个题目我也想了很久,不知道如何用最简单的几个字来概括这篇文章,原本打算取名《Angular单页面应用基于Ocelot API网关与IdentityServer4+ASP.NET Identity实现身份认证与授权》,然而如你所见,这样的名字实在是太长了。所以,我不得不缩写“单页面应用”几个字 阅读全文
posted @ 2020-03-01 09:20 dax.net 阅读(942) 评论(0) 推荐(0) 编辑
摘要: 在上文中,我介绍了如何在Ocelot中使用自定义的中间件来修改下游服务的response body。今天,我们再扩展一下设计,让我们自己设计的中间件变得更为通用,使其能够应用在不同的Route上。比如,我们可以设计一个通用的替换response body的中间件,然后将其应用在多个Route上。 O 阅读全文
posted @ 2020-02-24 13:17 dax.net 阅读(767) 评论(1) 推荐(0) 编辑
摘要: Ocelot是ASP.NET Core下的API网关的一种实现,在微服务架构领域发挥了非常重要的作用。本文不会从整个微服务架构的角度来介绍Ocelot,而是介绍一下最近在学习过程中遇到的一个问题,以及如何使用中间件(Middleware)来解决这样的问题。 问题描述 在上文中,我介绍了一种在Angu 阅读全文
posted @ 2020-02-22 05:33 dax.net 阅读(1377) 评论(0) 推荐(0) 编辑
摘要: 效果 首先看看效果: 本文将介绍如何基于Angular 8和Bootstrap 4来实现上面的主题切换效果。 设计 遵循Bootstrap的设计,我们会使用bootswatch.com提供的免费主题来实现上面的效果。Bootswatch为前端程序员提供了多达21种免费的Bootstrap主题,并且提 阅读全文
posted @ 2020-02-08 21:27 dax.net 阅读(752) 评论(0) 推荐(0) 编辑
摘要: 手头有个ASP.NET Core 2.0的项目,打算将里面的依赖包进行一个版本升级,鉴于该项目还是一年前开发的,使用的是.NET Core 2.0的版本,这次正好借着.NET Core 3.0在上个月刚刚发布的机会,干脆一起将该项目所使用的.NET Core版本从2.0升级到3.0,但这过程也并不是 阅读全文
posted @ 2019-10-09 13:42 dax.net 阅读(323) 评论(0) 推荐(0) 编辑
摘要: 在《容器化单页面应用中RESTful API的访问》以及《容器化单页面应用中Nginx反向代理与Kubernetes部署》两篇文章中,我介绍了一套容器化ASP.NET Core应用程序的方案,并对于Nginx反向代理的使用进行了介绍。在《使用Rancher在Microsoft Azure上搭建Kub 阅读全文
posted @ 2019-10-02 19:19 dax.net 阅读(374) 评论(0) 推荐(0) 编辑
摘要: Rancher是一种简化Kubernetes集群部署的方案,它的理念是,在任何地方运行Kubernetes集群。由于在最近的工作中需要用到,因此,就写一篇文章介绍一下Rancher的使用,以及通过Rancher在Azure上搭建Kubernetes集群的方式。开始使用RancherRancher的基... 阅读全文
posted @ 2019-09-14 21:42 dax.net 阅读(770) 评论(0) 推荐(0) 编辑
摘要: 在《容器化单页面应用中RESTful API的访问》一文中,我介绍了一个在容器化环境中单页面应用访问后端服务的完整案例。这里我将继续使用这个案例,介绍一下容器化单页面应用部署的另一个场景:将Nginx的职责独立出来。注:这里单页面应用是值一个包含前端页面、后端服务以及后台数据库的一个完整应用系统,这... 阅读全文
posted @ 2019-07-27 20:58 dax.net 阅读(934) 评论(0) 推荐(0) 编辑
摘要: 在上一篇博文中,我介绍了LOGO语言的C#实现,在该项目中,我使用了.NET下的语法解析框架:Irony。Irony框架最开始的时候是由Roman Ivantsov发布在codeplex上的一个开源项目,它使用MIT协议开源。由于2017年的时候,微软关闭了codeplex服务,为了让这个优秀的项目... 阅读全文
posted @ 2019-07-11 21:55 dax.net 阅读(1983) 评论(1) 推荐(1) 编辑
摘要: 上周在朋友中问了一圈,发现没有几个人知道Logo语言的,或许,这门古老的语言现在用的人已经非常少了,除了国外有少量的用户将Logo语言用于教育外,估计国内不会有人使用这门语言。其实,Logo语言本来也就是以编程教育为目的的一门寓教于乐的编程语言,因此,对于小朋友学计算机编程还是有些帮助的,使用Log... 阅读全文
posted @ 2019-07-09 21:08 dax.net 阅读(642) 评论(1) 推荐(0) 编辑
摘要: 最近在工作中,需要让运行在容器中的单页面应用程序能够访问外部的RESTful API。这个需求看起来并不困难,不过实现起来还是有些曲折的。在此,我就将这部分内容总结一下。在入正题之前,有个一问题,就是为什么要将单页面应用放在容器中运行?这个问题其实跟“为什么要将应用程序容器化”是一个问题。简单来讲,... 阅读全文
posted @ 2019-06-22 20:30 dax.net 阅读(475) 评论(0) 推荐(0) 编辑
摘要: 通过上文所介绍的内容,我们已经完成了RESTful API的开发,现在,就可以使用Azure DevOps来进行持续集成(CI)和k8s持续部署(CD)了。本文我会对使用Azure DevOps进行CI/CD的过程中需要注意的地方进行详细介绍,而对于Azure DevOps配置的详细步骤,我不会做太... 阅读全文
posted @ 2019-05-15 21:56 dax.net 阅读(354) 评论(0) 推荐(0) 编辑
摘要: 通过上文所述案例,我们已经选择了最优回归算法来预测学生的综合成绩,并且完成了基于训练数据集的预测模型训练。从实现上,训练好的模型被保存成一个ZIP文件,以便在其它项目中直接调用以完成机器学习的实践场景。在本文中,我将介绍如何在ASP.NET Core中使用这个ZIP文件,以提供用于学生成绩预测的RE... 阅读全文
posted @ 2019-05-06 21:54 dax.net 阅读(329) 评论(0) 推荐(0) 编辑
摘要: 在上文中,我简单地介绍了机器学习以及ML.NET的相关知识,从本讲开始,我会基于一个简单的案例:学生成绩预测,来介绍使用ML.NET进行机器学习以及API部署的基本过程。学生成绩预测案例本案例的数据来源为加州大学尔湾分校的机器学习公开样本数据集,数据介绍页面和下载地址为:https://archiv... 阅读全文
posted @ 2019-05-05 20:19 dax.net 阅读(383) 评论(0) 推荐(0) 编辑
摘要: 打算使用几篇文章介绍一下.NET下的机器学习框架ML.NET的具体应用,包括一些常用的业务场景、算法的选择、模型的训练以及RESTful API的创建、机器学习服务容器化,以及基于Azure DevOps的容器化部署等等相关的内容。如果你从来没有玩过机器学习,也从来没有了解过ML.NET,那么,本文... 阅读全文
posted @ 2019-04-06 20:51 dax.net 阅读(371) 评论(0) 推荐(0) 编辑
摘要: 想了很久,还是写这么一篇文章来总结一下有关分支策略和DevOps的一些内容吧。其实,DevOps相关的内容并不是我的工作范围,不过对于敏捷开发、DevOps、项目管理等等这一系列的与开发过程相关的内容,我还是有些经验的,也就抽时间跟大家分享一下吧。Git Flow应该是很多基于Git分布式版本控制系... 阅读全文
posted @ 2019-03-23 15:04 dax.net 阅读(621) 评论(0) 推荐(1) 编辑
摘要: 本文继续介绍使用Ocelot、IdentityServer4以及Spring Cloud Eureka搭建微服务网关的步骤。相关文章:《使用Ocelot、IdentityServer4、Spring Cloud Eureka搭建微服务网关:Step by Step(一)》Step 4:引入Ocelo... 阅读全文
posted @ 2019-03-02 20:35 dax.net 阅读(497) 评论(0) 推荐(1) 编辑
摘要: 半年前写过一篇类似的文章,题目是:《在.NET中使用机器学习API(ML.NET)实现化学分子式数据格式的判定》,在该文中,我介绍了化学分子式数据格式的基本知识,同时给出了一个案例,展示了如何在.NET/.NET Core中,使用微软开源的ML.NET框架,通过机器学习,实现化学分子式数据格式的预测... 阅读全文
posted @ 2019-02-22 20:12 dax.net 阅读(631) 评论(0) 推荐(1) 编辑
摘要: 网上这部分的文章和资料很多,有一篇非常不错的文章(《Net Core 基于Ocelot+IdentityServer4+Eureka的搭建高性能网关介绍》),也介绍了这个内容,我也是参考了其中的某些步骤,一步一步演练下来,感觉.NET Core在微服务生态方面也是越来越成熟,功能也越来越强大。因此,... 阅读全文
posted @ 2019-02-14 22:51 dax.net 阅读(418) 评论(0) 推荐(0) 编辑
摘要: 很多时候我们都会有设计一个后台服务的需求,比如,传统的Windows Service,或者Linux下的守护进程。这类应用的一个共同特点就是后台运行,并且不占用控制台界面。通常情况下,后台服务在提供服务时,会通过日志输出来记录服务处理的详细信息,用户也可以根据具体需要来设置不同的日志级别(Log L... 阅读全文
posted @ 2019-01-29 21:42 dax.net 阅读(1205) 评论(0) 推荐(0) 编辑
摘要: 假设在某个框架中有以下服务:public interface ICalculationService{ int Add(int x, int y);}public class CalculationService : ICalculationService{ private readon... 阅读全文
posted @ 2019-01-16 20:01 dax.net 阅读(2916) 评论(4) 推荐(0) 编辑