当前位置: 首页 > news >正文

东莞土木建筑学会网站企业网站建设案例有哪些公司

东莞土木建筑学会网站,企业网站建设案例有哪些公司,唐山电商网站建设,学短视频剪辑与制作在 Newbe.ObjectVistor 0.3 版本中我们非常兴奋的引入了一个紧张刺激的新特性#xff1a;使用状态图来生成任意给定的 FluentAPI 设计。开篇摘要 在非常多优秀的框架中都存在一部分 FluentAPI 的设计。这种 API 设计更加符合人类自言语言描述。使得代码更加具备可读性。在 New… 在 Newbe.ObjectVistor 0.3 版本中我们非常兴奋的引入了一个紧张刺激的新特性使用状态图来生成任意给定的 FluentAPI 设计。开篇摘要 在非常多优秀的框架中都存在一部分 FluentAPI 的设计。这种 API 设计更加符合人类自言语言描述。使得代码更加具备可读性。在 Newbe.ObjectVistor 0.3 版本中我们设计引入了一种使用状态图来自动生成 FluentAPI 代码的机制。极大了简化了 FluentAPI 实现所需要的脑力劳动。本篇我们将通过一些示例来了解一下当前版本中该特性的主要效果。整数累加 FluentAPI 假如我们现在需要实现下面这样效果的一个 API[Test] public void SumList() {var sumBuilder  new SumBuilder(new Listint());var re  sumBuilder.AddNumber(1).AddNumber(2).AddNumber(3).Sum();re.Should().Be(6); } 这个 API 使用 FluentAPI 的方式来表述一个累加的过程。为了实现这个 API 设计在 Newbe.ObjectVisitor 0.3 中使用下面这样一个状态图标记表述这个 API 设计stateDiagram[*] -- AddNumber : AddNumber(int number)AddNumber -- AddNumber : AddNumber(int number)AddNumber -- [*] : Sum() return int 这实际上是 mermaid 状态图标记。转换为图形即为下面这个效果。不需要过多的解释就可以理解SumBuilder有了这个状态图之后使用 Newbe.ObjectVisitor 中的 FluentApiDesignParser 和 FluentApiFileGenerator 便可以生成如下代码。using System; using System.Collections.Generic; using System.Linq;namespace Newbe.ObjectVisitor.Tests.SumBuilderFluentApi {public class SumBuilder : Newbe.ObjectVisitor.IFluentApi, SumBuilder.ISumBuilder_AddNumber{private readonly Listint _context;public SumBuilder(Listint context){_context  context;}#region UserImplprivate void Core_AddNumber(int number){throw new NotImplementedException();}private int Core_Sum(){throw new NotImplementedException();}#endregion#region AutoGenerate /// 此处省略了自动生成的固定代码部分请到仓库中查看#endregion} } 有了这个模板之后只要实现 Core_AddNumber 和 Core_Sum一个符合预期设计的 FluentAPI 就完成了!累加后累乘 现在我们稍微改变一下需求。上节我们实现的是一个 123 这样的累加效果。现在我们需要一个 123*456*(78910) 这样的效果。示例的调用代码如下[Test] public void MultipleSumList() {var builder  new MultipleSumBuilder(new ListListint());var re  builder.AddNumber(1).AddNumber(2).NextFactor().AddNumber(3).Sum();re.Should().Be(9); } 为了实现这个效果我们修改一下状态图增加一条新的规则得到stateDiagram[*] -- AddNumber : AddNumber(int number)AddNumber -- AddNumber : AddNumber(int number)AddNumber -- AddNumber : NextFactor()AddNumber -- [*] : Sum() return int 如图MultipleSumBuilder创建数据库链接字符串 前面的示例或许缺乏生产实际现在添加一个生产示例。我们现在要实现一个 ConnectionStringBuilder 用来创建数据库连接字符串其中有以下限制必须指定 Host。身份认证方式必须且只能指定一种要么是用户名密码方式要么是 Windows 凭据。首先我们有一个模型来保存上面提到的数据。public class ConnectionStringModel {public string Host { get; set; }public string Username { get; set; }public string Password { get; set; }public bool? IsWindowsAuthentication { get; set; } } 接着我们直接使用状态图来设计这个 FluentAPI。设计结果如下stateDiagram[*] -- SetHost : SetHost(string host)SetHost -- UseUsernamePassword : UseUsernamePassword(string username, string password)SetHost -- UseWindowsAuthentication : UseWindowsAuthentication()UseUsernamePassword -- [*] : Build() return stringUseWindowsAuthentication -- [*] : Build() return string 如图ConnectionStringBuilder有了设计接下来就是使用生成器啪嗒一下生成代码然后添加实现这里只展示需要自己实现的内容#region UserImplprivate void Core_SetHost(string host) {_context.Host  host; }private void Core_UseUsernamePassword(string username, string password) {_context.Username  username;_context.Password  password; }private void Core_UseWindowsAuthentication() {_context.IsWindowsAuthentication  true; }// 这里使用 ObjectVisitor 将一个模型的非空字段拼接在一起 private static readonly ICachedObjectVisitorConnectionStringModel, StringBuilder Builder default(ConnectionStringModel)!.V().WithExtendObjectConnectionStringModel, StringBuilder().ForEach((name, value, sb)  Append(name, value, sb)).Cache();private static void Append(string name, object? value, StringBuilder sb) {if (value ! null){sb.Append(${name}{value};);} }private string Core_Build() {var sb  new StringBuilder();Builder.Run(_context, sb);return sb.ToString(); }#endregion 下面是简单的两个测试用例public class ConnectionStringBuilderTest {[Test]public void UseUsernamePassword(){var builder  new ConnectionStringBuilder(new ConnectionStringModel());var re  builder.SetHost(localhost).UseUsernamePassword(yueluo, dalao).Build();re.Should().Be(Hostlocalhost;Usernameyueluo;Passworddalao;);}[Test]public void UseWindowsAuthentication(){var builder  new ConnectionStringBuilder(new ConnectionStringModel());var re  builder.SetHost(localhost).UseWindowsAuthentication().Build();re.Should().Be(Hostlocalhost;IsWindowsAuthenticationTrue;);} } 值得特别提出但是这和直接使用 ConnectionStringModel 模型来构建字符串通过 FluentAPI 的形式约束了开发者能够赋值的属性。可以避免忘记对必要的属性赋值或者错误赋值等等出错情况。Get 和 Delete 没有 BodyPost 和 Put 才有 和上一节类型我们使用 FluentAPI 来构建请求但是需要满足以下约束可以指定 UriGet 和 Delete 不能指定 Body但是 Post 和 Put 可以上设计stateDiagram[*] -- Get : Get()Get -- GetUri : SetUri(Uri uri) share _SetUriCore[*] -- Delete : Delete()Delete -- DeleteUri : SetUri(Uri uri) share _SetUriCore[*] -- Post : Post()Post -- PostUri : SetUri(Uri uri) share _SetUriCorePostUri -- SetContent : _SetContent share _SetContentCore[*] -- Put : Put()Put -- PutUri : SetUri(Uri uri) share _SetUriCorePutUri -- SetContent : _SetContent share _SetContentCoreSetContent -- [*] : _Build return HttpRequestMessageGetUri -- [*] : _Build return HttpRequestMessageDeleteUri -- [*] : _Build return HttpRequestMessage 上图RequestBuilder注意这里引入了一些奇怪的关键词 share 由于这些关键词还未全部定稿因此不展开说明。可以通过以下链接查看生成的代码和测试用例。https://github.com/newbe36524/Newbe.ObjectVisitor/tree/main/src/Newbe.ObjectVisitor/Newbe.ObjectVisitor.Tests/HttpClientFluentApihttps://gitee.com/yks/Newbe.ObjectVisitor/tree/main/src/Newbe.ObjectVisitor/Newbe.ObjectVisitor.Tests/HttpClientFluentApi造一辆汽车一定要四个轮子一个引擎 我们需要实现一个 CarBuilder有一些约束CarBuilder 当且仅当在调用四次 AddWheel 和一次 AddEngine 之后才能出现 Build 方法虽然限制了次数但是顺序不能限定什么顺序都可以。上设计stateDiagram[*] -- W1 : AddWheel(int size) share AddWheelW1 -- W2 : AddWheel(int size) share AddWheelW2 -- W3 : AddWheel(int size) share AddWheelW3 -- W4 : AddWheel(int size) share AddWheel[*] -- E : AddEngine(string engine) share AddEngineE -- WE1 : AddWheel(int size) share AddWheelWE1 -- WE2 : AddWheel(int size) share AddWheelWE2 -- WE3 : AddWheel(int size) share AddWheelWE3 -- WE4 : AddWheel(int size) share AddWheelW1 -- WE1 : AddEngine(string engine) share AddEngineW2 -- WE2 : AddEngine(string engine) share AddEngineW3 -- WE3 : AddEngine(string engine) share AddEngineW4 -- WE4 : AddEngine(string engine) share AddEngineWE4 -- [*] : Build() return Car 上图这个图从出发点出发不论怎么走都会经过四次 AddWheel 和 一次 AddEngineCarBuilder注意虽然设计看起来非常复杂但是需要手写的代码只有非常简短的两段#region UserImplprivate void Shared_AddWheel(int size) {if (_context.Wheel1  0){_context.Wheel1  size;return;}if (_context.Wheel2  0){_context.Wheel2  size;return;}if (_context.Wheel3  0){_context.Wheel3  size;return;}if (_context.Wheel4  0){_context.Wheel4  size;return;} }private void Shared_AddEngine(string engine) {_context.Engine  engine; }private Car Core_Build() {return _context; }#endregion 可以通过以下链接查看生成的代码和测试用例。https://github.com/newbe36524/Newbe.ObjectVisitor/tree/main/src/Newbe.ObjectVisitor/Newbe.ObjectVisitor.Tests/CarBuilderhttps://gitee.com/yks/Newbe.ObjectVisitor/tree/main/src/Newbe.ObjectVisitor/Newbe.ObjectVisitor.Tests/CarBuilder本篇总结 这是一个很有意思的设计如果你对这个设计很感兴趣有新奇的想法欢迎关注 Newbe.ObjectVisitor 项目提出您的宝贵想法。
http://www.pierceye.com/news/847943/

相关文章:

  • 区网站建设有域名后怎样做网站
  • 加强网站基础建设推广app的平台
  • 全球访问量最大的网站排名中国贸易公司100强
  • 衡水市网站制作有没有专门做儿童房的网站
  • 网站建设如何做报价网络工程师考试时间
  • wordpress建公司网站ftp转换wordpress
  • 网站开发 公司简介网站开发工具有哪些
  • 阿里云备案 网站备案域名购买河南洛阳网络公司
  • 工会网站建设请示怎么做属于自己的售卡网站
  • 怎么用ftp工具上传网站源码极速网站建设定制多少钱
  • 文山网站建设哪家好网站开发需要会的东西
  • ie9网站后台编辑器网络公司办公室图片
  • 山西格泰网站建设空间商网站
  • 做网站建设哪家便宜python 做电商网站
  • 网站项目ppt怎么做网络销售推广平台
  • 网站推广营销策略一级a做爰片免费网站 小说
  • 音乐网站排名室内设计基础知识点
  • 毕业设计音乐网站开发背景网站内容怎么修改
  • 风琴折叠图片效果网站宁波seo托管公司
  • app定制研发app开发seozou是什么意思
  • 手机在线制作表白网站集团网站建设价格
  • 手工蛋糕网站开发报告网站集群建设实施方案
  • 定制小程序网站开发公司如何做网站详细步骤
  • 济南做网站多钱网站美化公司
  • 信息流广告的特点青岛网站优化公司哪家好
  • 东莞网站优化公司亚马逊网站开发使用的什么方式
  • 天津网站免费制作专门做教育的视频网站
  • 深圳做网站的公司 cheungdom贵阳软件开发公司在哪里
  • 铜川做网站的公司电话超链接对做网站重要吗
  • 东莞市公租房申请网站-建设网厦门公司建站