C#注解属性的感想一:
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#注解属性的感想一:相关推荐
- 【EventBus】Subscribe 注解分析 ( Subscribe 注解属性 | threadMode 线程模型 | POSTING | MAIN | MAIN_ORDERED | ASYNC)
文章目录 一.Subscribe 注解属性 二.threadMode 线程模式 ( POSTING | MAIN | MAIN_ORDERED | BACKGROUND | ASYNC ) 一.Sub ...
- 【IOC 控制反转】Android 事件依赖注入 ( 事件依赖注入具体的操作细节 | 获取 Activity 中的所有方法 | 获取方法上的注解 | 获取注解上的注解 | 通过注解属性获取事件信息 )
文章目录 前言 一.获取 Activity 中的所有方法 二.获取方法上的注解 三.获取注解上的注解 四.通过注解属性获取相关事件信息 前言 Android 依赖注入的核心就是通过反射获取 类 / 方 ...
- 【Java 注解】自定义注解 ( 注解属性定义与赋值 )
文章目录 一.自定义注解格式 二.注解本质分析 三.注解属性及类型 四.注解属性类型 五.注解属性赋值简化操作 一.自定义注解格式 分析 Java 中自带的 @Override 注解 , 源码如下 : ...
- spring MVC请求处理类注解属性详解
spring MVC请求处理类注解属性详解
- java 注解 属性 类型_收藏!你一定要知道的Java8中的注解
全文共3002字,预计学习时长6分钟 海中有大量的注解! JavaSE 1.5中首次引入了注解.Java注解的目的是允许程序员编写关于其程序的元数据.在OracleDocs中,注解的定义是:" ...
- 深入了解EntityFramework——数据注解属性
当惯例规则不符合设计需求时,我们可以使用数据注解配置打造更合适的数据库模型.本文根据示例项目对常用的数据注解属性做一个简要的举例说明. EFCodeFirst使用的约定大于配置的的编程模式, 这种模式 ...
- requestmapping注解作用_Java高级架构师-Spring 注解编程之注解属性别名与覆盖
欢迎关注头条号:Java小野猫 注解属性方法 在进入了解 Spring 注解属性功能之前,我们先看一个正常 Java 注解. 在注解中,属性方法与其他类/接口方法写法类似,但是存在一些区别. 注解属性 ...
- java属性注解_【java自定义注解1】java自定义注解-属性
关于自定义注解,以前项目种应用的不多,最近看新项目过程中发现了挺多自定义注解相关内容,使用起来比较巧妙,于是 总结了两种方式,记录如下: 第一种:结合反射进行属性注入,代码如下: 1.定义一个注解: ...
- 通过反射动态修改自定义注解属性值
通过反射动态修改自定义注解属性值 java/lang/reflect 这个包下面都是Java的反射类和工具. Annotation 注解,也是位于这个包里的. 注解自从Java 5.0版本引入后,就成 ...
最新文章
- 微信9年:张小龙指明方向,微信AI全面开放NLP能力
- Java 逆序存放4位数
- 生日QQ配对【找到你生日QQ了吗?】
- hihoCoder - 1082 - 然而沼跃鱼早就看穿了一切 (字符串处理!!)
- 【中文模板】Latex如何写中文文档
- 未封装的扩展程序是什么意思_Android漏洞挖掘第三期:客户端完整性未校验
- 2017蓝桥杯省赛---java---B---2(纸牌三角形)
- 经过路由无法找到计算机,电脑无法启动服务提示系统找不到指定的路径(图)
- PostgreSQL如何使用PLJava支持Java编程
- Nginx 核心架构设计
- 关于AIR 应用程序沙箱
- MySQL 管理工具:Navicat for MySQL 8.0.19 中文版(破解版)
- 计算机课题立项申报书范文,专项课题立项申报书模板.doc
- Unity学习笔记--无限地图(地图拼接)
- 汇编intel 8086/8088/80386 学习
- 【数论】快速分解质因数的技巧 筛法求素数(快速筛)
- linux7怎么关闭更新,如何让centos7关闭yum自动更新系统
- matlab无法用mcc,使用matlab的mcc时为什么会出现fopen错误?
- idea maven 显示wating for maven import completionomitted for duplicate jar
- 南方暴雨破纪录,路上的车慢慢开,太急要往河里栽
热门文章
- “国际软件自由日”介绍
- 《领域驱动设计:软件核心复杂性应对之道(修订版)》—第2章 2.1节模式:Ubiquitous Language...
- Nodejs进阶:express+session实现简易身份认证
- Shell中常用的引号
- 安全框架 - Shiro与springMVC整合的注解以及JSP标签
- 练习 hdu 5523 Game
- centos配置-java-php-mysql【转载参考】
- lob移表空间 oracle_移动一个带有lob字段的表到另外一个表空间
- 1.2.2 OSI参考模型
- FFT对信噪比的增益计算