你必须要知识的架构知识~第四章 抽象类展现代码的层次感

简介:

有几天没写这方面的文章了,坦白说,没灵感,今天晚上,还是要写点东西,准备说一下抽象类在架构设计中的层次感,其实一说到抽象类,大家第一个就会想到基类,由通用属性和通用方法组成的类,可能定义一些规范,而自身又可以实现一些统一功能的类,这都是抽象类的表现,我不想把书本上的话拿出来说,也不想把某校培训学校名师的话拿来说,我只想从我的代码中说问题,因为大家真正想听的,想看的是这些“术语“在代码中的应用,不是吗?呵呵。

这几天又看了看EF的code first模块,就是把实体类设计好,然后运行后,将用到的类进行数据表的自动生成,我也曾经说过,code first使“面向对象更加面向对象”了,但如果是团队开发的话,这种模块可能会有点乱,给数据统一带来一些坏味道,为何?说一个场景:张三建了一张user表,李四不知道张三建了user表,他希望用到一个用户类型的实体,所以李四也可能建立了一个userbase表,这时,当他们运行程序后,数据库可能会有两个功能相同的用户表,这就是数据上的不统一,其实code first对象小项目还是很不错的选择,大型项目建议还是用database first,即,先设计数据库,再生成实体对象。

用code first说一个抽象类的用法:

首先对于实体表应该会有一个主键,为了保险起见,我们用long类型,也就是sqlserver里的bitint ,C#里int64,保留字是long,代码可能是这样

image

/// <summary>
  /// 实体基类
  /// </summary>
  public abstract class BaseEntity
  {
      /// <summary>
      /// 統一主鍵
      /// </summary>
      [Key]
      [Display(AutoGenerateField = false)]
      public virtual long ID { get; set; }

   }

而继承它的实体,将会享有一个long类型的主键,名为ID,实体代码可能是这样

/// <summary>
   /// 用户表
   /// </summary>
   public class UserBase : BaseEntity
   {
       public UserBase()
       {
       }
       /// <summary>
       /// 用户名
       /// </summary>
       [Required(MessageType.RequiredField, "UserName")]
       public string UserName { get; set; }
       /// <summary>
       /// 密码
       /// </summary>
       [Required(MessageType.RequiredField, "Password")]
       public string Password { get; set; }
       /// <summary>
       /// 电子邮件
       /// </summary>
       public string Email { get; set; }
   }
其时,抽象类很多时间是为我们提供一些可以复习的虚方法,它使程序开发更具灵活性和扩展性,同时也不破解面向对象的原则。
代码可能是这样
/// <summary>
   /// Controller基类
   /// </summary>
   internal abstract class BaseController : System.Web.Mvc.Controller
   {
       /// <summary>
       /// 数据统一操作对象
       /// 子类根据自己的具体需要进行创建
       /// </summary>
       protected Data.IRepository _iRepository { get; set; }
       /// <summary>
       /// 用户操作权限
       /// </summary>
       protected int UserOperatorRole { get; set; }
       /// <summary>
       /// 当前登陆的用户ID
       /// </summary>
       protected long Current_UserID { get; set; }
   }
这是一个controller的基类型,它提供了一个指向数据层的引用,这个引用我们多用接口来表示,即在基类声明一个接口类型,然后在派生类中建立符合这个接口的实例,而建立什么样的实体(SQL数据库的,MYSQL数据库的,内存的等等)操作,由具体的业务决定,具体业务可能是这样
public class HomeController : BaseController
  {
      public HomeController()
          : this(new DataRepository()) { }

      public HomeController(IRepository iRepository)
      {
          _iRepository = iRepository;
      }
……
}
我们可以看到,在默认情况下,HomeController类型会建立一个DataRepository进行对数据操作实现,当然,在构造方法中,我们会为其它业务流出一个实体的方法,也就是public HomeController(IRepository iRepository) 这个方法。
在抽象方法对项目结构层次感这篇文章中,我们应该可以体会到,在开发项目时,第一要善于将可以抽象的对象进行抽象,第二将可能出现的情况通过抽象类或者接口提前预留出来,这是很重要的。

谢谢各位阅读,有事您留……

本文转自博客园张占岭(仓储大叔)的博客,原文链接:你必须要知识的架构知识~第四章 抽象类展现代码的层次感,如需转载请自行联系原博主。

目录
相关文章
|
2月前
|
数据采集 机器学习/深度学习 大数据
行为检测代码(一):超详细介绍C3D架构训练+测试步骤
这篇文章详细介绍了C3D架构在行为检测领域的应用,包括训练和测试步骤,使用UCF101数据集进行演示。
70 1
行为检测代码(一):超详细介绍C3D架构训练+测试步骤
|
26天前
|
敏捷开发 缓存 中间件
.NET技术的高效开发模式,涵盖面向对象编程、良好架构设计及高效代码编写与管理三大关键要素
本文深入探讨了.NET技术的高效开发模式,涵盖面向对象编程、良好架构设计及高效代码编写与管理三大关键要素,并通过企业级应用和Web应用开发的实践案例,展示了如何在实际项目中应用这些模式,旨在为开发者提供有益的参考和指导。
23 3
|
2月前
|
机器学习/深度学习 网络架构 计算机视觉
目标检测笔记(一):不同模型的网络架构介绍和代码
这篇文章介绍了ShuffleNetV2网络架构及其代码实现,包括模型结构、代码细节和不同版本的模型。ShuffleNetV2是一个高效的卷积神经网络,适用于深度学习中的目标检测任务。
92 1
目标检测笔记(一):不同模型的网络架构介绍和代码
|
1月前
|
存储 安全 Java
系统安全架构的深度解析与实践:Java代码实现
【11月更文挑战第1天】系统安全架构是保护信息系统免受各种威胁和攻击的关键。作为系统架构师,设计一套完善的系统安全架构不仅需要对各种安全威胁有深入理解,还需要熟练掌握各种安全技术和工具。
118 10
|
1月前
|
运维 监控 Serverless
Serverless架构在图像处理等计算密集型应用中展现了显著的优势
Serverless架构在图像处理等计算密集型应用中展现了显著的优势
33 1
|
2月前
|
运维 Serverless 数据处理
Serverless架构在图像处理等计算密集型应用中展现了显著的优势
Serverless架构在图像处理等计算密集型应用中展现出显著优势,包括加速研发交付、降低成本、零运维成本、高效资源利用、自动扩展、实时数据处理及快速原型开发,为高并发、动态需求场景提供高效解决方案。
60 1
|
2月前
|
运维 Serverless 数据处理
Serverless架构在图像处理等计算密集型应用中展现出显著优势
【10月更文挑战第6天】Serverless架构在图像处理等计算密集型应用中展现出显著优势,包括加速研发交付、成本效益、零运维成本、高效资源利用、自动扩展能力、实时数据处理及快速原型开发,为高并发、动态需求场景提供高效、灵活的解决方案。
48 4
|
2月前
|
设计模式 人工智能 算法
编程之旅:从代码到架构的感悟
【9月更文挑战第33天】在编程的世界里,代码不仅是实现功能的工具,更是连接思想与现实的桥梁。本文将通过个人的编程经历,分享从编写第一行代码到设计系统架构的旅程,探索编程背后的哲学和技术演变。我们将一起思考,如何在代码的海洋中找到自己的航向,以及在这个过程中如何不断成长和适应变化。
|
2月前
|
机器学习/深度学习 大数据 PyTorch
行为检测(一):openpose、LSTM、TSN、C3D等架构实现或者开源代码总结
这篇文章总结了包括openpose、LSTM、TSN和C3D在内的几种行为检测架构的实现方法和开源代码资源。
69 0
|
3月前
|
机器学习/深度学习 测试技术 数据处理
KAN专家混合模型在高性能时间序列预测中的应用:RMoK模型架构探析与Python代码实验
Kolmogorov-Arnold网络(KAN)作为一种多层感知器(MLP)的替代方案,为深度学习领域带来新可能。尽管初期测试显示KAN在时间序列预测中的表现不佳,近期提出的可逆KAN混合模型(RMoK)显著提升了其性能。RMoK结合了Wav-KAN、JacobiKAN和TaylorKAN等多种专家层,通过门控网络动态选择最适合的专家层,从而灵活应对各种时间序列模式。实验结果显示,RMoK在多个数据集上表现出色,尤其是在长期预测任务中。未来研究将进一步探索RMoK在不同领域的应用潜力及其与其他先进技术的结合。
110 4