C#当中Attribute(中文注解属性)已经知道这个概念已经很久很久了,不过悲剧的是在实际项目当中重来没有用它来做过什么东西,以致对它的理解总是很浅薄,更谈不上如何在实际项目中运用它。最近在学习<MVC3框架设计>这本书中,看到Filter这一章,突然悟到点感受,先分享如下:

感想一:Attribute大部分用在框架设计与组件设计中

我们平时开发的大部分是三层架构的Web项目,开发人员面向的客户就是只有自己。而框架设计或组件设计中,系统的目标是开发人员,所以整个系统的设计一部分框架设计者实现,另一部分由框架使用者(开发人员)来完成。就像asp.Net MVC框架一样,微软设计了Web项目的核心生命流程,如下图

而对于我们.Net的开发人员,只需要在这个HTTP框架流程管道中挂接自己的代码,就像乘上这班车一样就能顺利达到目的地。如在Controller中定义自己的Action,读取数据库,然后返回给ViewEngine。

话又回到我们的主题:这些与Attribute有什么关系呢?

当然有关系,框架的设计者为了给开发人员更多的接口,更多选择,所以定义很多Attribute供开发人员选择使用,来指定不同的框架功能。

举例:当开发人员需要利用Filter特性来验证用户登录情况,如下图

public class CheckinLoginAttribute:ActionFilterAttribute  {  public override void OnActionExecuting(ActionExecutingContext filterContext)  {  if (filterContext.HttpContext.Session["user"] == null)  {  filterContext.HttpContext.Response.Redirect("/User/Login");  }  }  }  public class HomeController : Controller  {  //  // GET: /Home/
  [CheckinLogin]  public ActionResult Index()  {  return View();  }  }  

当框架实际执行时,会通过反射发现存在[CheckInLogin]这个特性,然后动态决定行为,去执行用户定义的代码。这样做的好处时,通过Attribute机制将业务代码与权限代码很好的分离开发,代码更简洁,可理解性更强。如果没有这个特性的话,判断用户登录的代码就必须放在Action中完成,这样造成了不相关的代码耦合的在一起,使代码更难维护和阅读。

感想二:Web项目中也可以使用Attribute

有的童鞋要说了,我们这些码农平时忙的连学习总结的时间也没有,怎么可能有时间做框架设计呢?那岂不是永远也不可能正在用到Attribute?答案是否定,只要你善于观察、善于用心,项目中同样可以用到这个特性。对于如何应用,下次再讨.....

总结:

尽管顿悟出这么一点感受,但是毕竟还没有真正在项目中应用过,对它的理解与掌握还是任重而道远。我一直认为没有在实践中真实解决问题的经验,对知识的理解永远是停留在表面,不管你理论上理解的有多透彻。

转载于:https://www.cnblogs.com/cstao110/p/3749898.html

C#注解属性的感想一:相关推荐

  1. 【EventBus】Subscribe 注解分析 ( Subscribe 注解属性 | threadMode 线程模型 | POSTING | MAIN | MAIN_ORDERED | ASYNC)

    文章目录 一.Subscribe 注解属性 二.threadMode 线程模式 ( POSTING | MAIN | MAIN_ORDERED | BACKGROUND | ASYNC ) 一.Sub ...

  2. 【IOC 控制反转】Android 事件依赖注入 ( 事件依赖注入具体的操作细节 | 获取 Activity 中的所有方法 | 获取方法上的注解 | 获取注解上的注解 | 通过注解属性获取事件信息 )

    文章目录 前言 一.获取 Activity 中的所有方法 二.获取方法上的注解 三.获取注解上的注解 四.通过注解属性获取相关事件信息 前言 Android 依赖注入的核心就是通过反射获取 类 / 方 ...

  3. 【Java 注解】自定义注解 ( 注解属性定义与赋值 )

    文章目录 一.自定义注解格式 二.注解本质分析 三.注解属性及类型 四.注解属性类型 五.注解属性赋值简化操作 一.自定义注解格式 分析 Java 中自带的 @Override 注解 , 源码如下 : ...

  4. spring MVC请求处理类注解属性详解

    spring MVC请求处理类注解属性详解

  5. java 注解 属性 类型_收藏!你一定要知道的Java8中的注解

    全文共3002字,预计学习时长6分钟 海中有大量的注解! JavaSE 1.5中首次引入了注解.Java注解的目的是允许程序员编写关于其程序的元数据.在OracleDocs中,注解的定义是:" ...

  6. 深入了解EntityFramework——数据注解属性

    当惯例规则不符合设计需求时,我们可以使用数据注解配置打造更合适的数据库模型.本文根据示例项目对常用的数据注解属性做一个简要的举例说明. EFCodeFirst使用的约定大于配置的的编程模式, 这种模式 ...

  7. requestmapping注解作用_Java高级架构师-Spring 注解编程之注解属性别名与覆盖

    欢迎关注头条号:Java小野猫 注解属性方法 在进入了解 Spring 注解属性功能之前,我们先看一个正常 Java 注解. 在注解中,属性方法与其他类/接口方法写法类似,但是存在一些区别. 注解属性 ...

  8. java属性注解_【java自定义注解1】java自定义注解-属性

    关于自定义注解,以前项目种应用的不多,最近看新项目过程中发现了挺多自定义注解相关内容,使用起来比较巧妙,于是 总结了两种方式,记录如下: 第一种:结合反射进行属性注入,代码如下: 1.定义一个注解: ...

  9. 通过反射动态修改自定义注解属性值

    通过反射动态修改自定义注解属性值 java/lang/reflect 这个包下面都是Java的反射类和工具. Annotation 注解,也是位于这个包里的. 注解自从Java 5.0版本引入后,就成 ...

最新文章

  1. 微信9年:张小龙指明方向,微信AI全面开放NLP能力
  2. Java 逆序存放4位数
  3. 生日QQ配对【找到你生日QQ了吗?】
  4. hihoCoder - 1082 - 然而沼跃鱼早就看穿了一切 (字符串处理!!)
  5. 【中文模板】Latex如何写中文文档
  6. 未封装的扩展程序是什么意思_Android漏洞挖掘第三期:客户端完整性未校验
  7. 2017蓝桥杯省赛---java---B---2(纸牌三角形)
  8. 经过路由无法找到计算机,电脑无法启动服务提示系统找不到指定的路径(图)
  9. PostgreSQL如何使用PLJava支持Java编程
  10. Nginx 核心架构设计
  11. 关于AIR 应用程序沙箱
  12. MySQL 管理工具:Navicat for MySQL 8.0.19 中文版(破解版)
  13. 计算机课题立项申报书范文,专项课题立项申报书模板.doc
  14. Unity学习笔记--无限地图(地图拼接)
  15. 汇编intel 8086/8088/80386 学习
  16. 【数论】快速分解质因数的技巧 筛法求素数(快速筛)
  17. linux7怎么关闭更新,如何让centos7关闭yum自动更新系统
  18. matlab无法用mcc,使用matlab的mcc时为什么会出现fopen错误?
  19. idea maven 显示wating for maven import completionomitted for duplicate jar
  20. 南方暴雨破纪录,路上的车慢慢开,太急要往河里栽

热门文章

  1. “国际软件自由日”介绍
  2. 《领域驱动设计:软件核心复杂性应对之道(修订版)》—第2章 2.1节模式:Ubiquitous Language...
  3. Nodejs进阶:express+session实现简易身份认证
  4. Shell中常用的引号
  5. 安全框架 - Shiro与springMVC整合的注解以及JSP标签
  6. 练习 hdu 5523 Game
  7. centos配置-java-php-mysql【转载参考】
  8. lob移表空间 oracle_移动一个带有lob字段的表到另外一个表空间
  9. 1.2.2 OSI参考模型
  10. FFT对信噪比的增益计算