设为首页 收藏本站
查看: 1213|回复: 0

[经验分享] 最近的一些工作总结

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2017-2-23 10:23:59 | 显示全部楼层 |阅读模式
      坚持与保持热情是一件很难的事,说实话有时候我也会质疑现在去深入学习一些技术有没有用,因为心态有时候会太浮躁,为什么要谈这个呢,因为从去年开始我听到最多的就是这些问题,上个月领导问过我这个问题,未来5年有什么职业规划? 其实按照我的想法比较简单,money多一些减轻些物质上的压力,多陪陪亲人,能有时间做自己喜欢的事就够了。
      说一说工作,第一份工作做.NET ,后面学了点JAVA 相对来说开源成熟的解决方案确实要多很多,如spring,orm,soa,android,大数据等等, 不会像MS那么狭小,不过现在MS也在进步。现在的主要工作还是.NET ,平时的工作强度还好,去年在做了一个网站,现在基本就是新增功能与维护,另外就是APP的接口,还有就是各种支付 支付宝 微信 银联 支付等等,后面感觉很繁琐,就基与WEBAPI封装了一套全支付接口。平时的工作强度还能接受,就是多而杂。技术上平时了解自己感兴趣的知识,折腾linux,了解点新语言 nodejs, golang 等等。

工作
  简单先说说项目都用了哪些技术吧。
  一.ASP.NET MVC
  网站使用ASP.NET MVC 开发效率相对还是蛮快的,比如有如下的特性
  1.使用模型的声明式验证 ,简化了表单验证
  2.Razor视图或单独使用RazorEngine
  3.拦截器 我习惯这样称呼,因为之前springmvc一般这样称呼,比如做一个自动登录的验证[cookies],全局的日志记录等
  4.路由也是蛮重要的一个东西,特别是对有洁癖的开发人员来说,比如你就是喜欢要每一个访问的URL都要简短并且有意义,或SEO实现类似/shanghai的URL等等(开始mvc4试了特性路由 http://attributerouting.net/),ASP.NET MVC 5.1 后已经支持,调试路由的工具 Install-Package routedebugger 等
  5.返回匿名类JSON,局部视图,扩展htmlhelper等等,这个功能非常方便,可以自定义扩展自己的方法
  6.缓存 使用MvcDonutCaching ,功能还比原生的多一些,基本一致,另外缓存服务Redis或Couchbase
  7.js与css的合并压缩,Bundle 确实要方便很多,无需管理js的合并与样式版本号问题
  8.日志 使用了NLog个人感觉要笔log4j好很多,错误与异常级别记录文本,window事件,db,email,基本满足需求,另外Elman也是蛮好用
  9.XSS 使用了AntiXSS,ValidateAntiForgeryToken 另外就是写代码的时候多注意
  10.页面性能,使用 MiniProfiler [http://www.asp.net/mvc/overview/performance/profile-and-debug-your-aspnet-mvc-app-with-glimpse]检查调试页面性能,貌似有时候会与 routedebugger 的样式混乱
  二. WEBAPI
  APP的接口与一些常用的接口之前是使用WCF的Rest,后面感觉比较臃肿,就换成了WEBAPI, 个人非常喜欢这个,相比WCF比较轻量,好扩展,相比ASP.NET MVC我改进了一点东西 DSC0000.png
  1.使用Autofac作为IOC容器
  2.使用特性路由定义接口URL
  3.使用markdown书写接口文档
  5.全局拦截器对参数约束验证
  6.自动生成/help参数文档 Install-Package Microsoft.AspNet.WebApi.HelpPage
  7.支持跨越访问 Install-Package Microsoft.AspNet.WebApi.Cors
  8.路由调试 WebApiRouteDebugger 执行过程跟踪 Install-Package Microsoft.AspNet.WebApi.Tracing Update-Package Microsoft.AspNet.WebApi.WebHost
  9.另外推荐个HTTP类库Flurl.Http个人感觉要比.NET 4.5自带的HttpClient要好用,支持Task异步 ;扩展方法 Z.ExtensionMethods类库,包含大多数常用的扩展方法
  例:



        /// <summary>
/// 测试业务异步回调接口是否正确
/// </summary>
/// <param name="notifyUrl">业务服务地址</param>
/// <returns></returns>
        [HttpPost]
[Route("notify")]
public async Task<IHttpActionResult> PostJsonAsync(string notifyUrl)
{
if (notifyUrl.IsNullOrEmpty() || !notifyUrl.Contains("http", StringComparison.OrdinalIgnoreCase)) return Ok(new { IsError = true, Msg = "NotifyUrl IS EMPTY", Data = string.Empty });
//notifyUrl = notifyUrl.UrlDecode(System.Text.Encoding.UTF8);
var payPal = new PayPalData
{
UserID = "test",
Subject = "测试异步回调接口",
OutTradeNO = "10086",
CreateTime = DateTime.Now,
GuidNO = Guid.NewGuid().ToString(),
TotalFee = "0.01",
Origin = "WEB"
};
try
{
var data = await notifyUrl.PostJsonAsync(payPal).ReceiveJson<WebAPIResponse>();
logger.Info("PayPalController JsonAsync : " + payPal.SerializeJson(System.Text.Encoding.UTF8));
if (data.IsError)
{
return Ok(new { IsError = true, Msg = data.Msg, Data = data.Data });
}
return Ok(new { IsError = false, Msg = string.Empty, Data = payPal.SerializeJson(System.Text.Encoding.UTF8) });
}
catch (Exception ex)
{
return Ok(new { IsError = true, Msg = "PostJsonAsync Exception : " + ex.Message, Data = payPal.SerializeJson(System.Text.Encoding.UTF8) });
}
}
  列:Filter



/// <summary>
/// http://www.asp.net/web-api/overview/formats-and-model-binding/model-validation-in-aspnet-web-api
/// http://www.asp.net/web-api/overview/error-handling/exception-handling
/// </summary>
public class ModelValidFilter : ActionFilterAttribute
{
/// <summary>
/// 模型验证
/// </summary>
/// <param name="actionContext"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public override Task OnActionExecutingAsync(HttpActionContext actionContext, System.Threading.CancellationToken cancellationToken)
{
if (actionContext.ActionArguments.Values.FirstOrDefault().IsNull())
{
var data = new { IsError = true, Msg = "参数不能为空!", Data = string.Empty };
actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.OK, data);
return base.OnActionExecutingAsync(actionContext, cancellationToken);
}
if (!actionContext.ModelState.IsValid)
{
// 注意 !!!!: http://tmenier.github.io/Flurl/fluent-http/ HttpStatusCode.BadRequest
var data = new { IsError = true, Msg = actionContext.ModelState.Values.FirstOrDefault().Errors.FirstOrDefault().ErrorMessage, Data = actionContext.ModelState.Keys.FirstOrDefault() + " :参数验证有误!!!" };
actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.OK, data);
return base.OnActionExecutingAsync(actionContext, cancellationToken);
}
return base.OnActionExecutingAsync(actionContext, cancellationToken);
}
}
  另外推荐一个开源的Markdown编辑器  https://pandao.github.io/editor.md/ ,可以集成到项目中,写写接口文档。
DSC0001.png

  三.StackExchange Dapper
  推荐StackExchange的两款开源项目 StackExchange.Redis (https://github.com/StackExchange/StackExchange.Redis) 与 Dapper
  使用Dapper,操作数据库的代码相比更简洁 ,同时也支持.NET 4.5 Task异步 ,示例具体git下来看下单元测试 https://github.com/StackExchange/dapper-dot-net ,不过要主要Dapper下的一个与MSSQL执行计划的问题  
  Be careful with varchars in Dapper :http://www.codeproject.com/Articles/594133/BepluscarefulpluswithplusvarcharsplusinplusDapper
  四. Quartz
  使用了Quartznet,寄宿window服务,运行一直很稳定。如果想不想使用服务方式可以试试 Install-Package Hangfire 可以集成MVC或OWIN等。

活动
  杭JS2014
  去年参加了杭JS2014 ,基本就是分享一些关于nodejs相关的东西,不得不说阿里不仅仅是JAVA帝国还是前端江湖的缔造者。
  杭JS - 2014 JavaScript中国开发者大会: 2014-6-21 ~ 22
  https://cnodejs.org/topic/53473dde502e5602740078bc
  2014 杭JS大会 会议盛况与技术热点现场报道(直播)
  http://segmentfault.com/a/1190000000584556
  杭JS 2014 演讲视频合集
  https://cnodejs.org/topic/53bbc408a3ccaece73467f11
  PyConChina 2014
  PyCon2014 这个票是gitcafe送的,一些主题 linux的线程 协程 回调与上下文切换; py与机器学习很厉害的样子;golang 的nsq消息列队
  shanghai-osc-meeting-2014
  shanghai-osc-meeting   the docker way;go的持续集成
  OSC上海源创会
  http://115.29.174.111/shanghai-osc-meeting/
  搭建服务
  后面我还搭建了基于一个nodejs博客:http://115.29.174.111/ 与基于golang的git服务:http://115.29.174.111:3000/

现在
  码了这么多字,都是一些零碎的东西,感觉也没啥主题,就是记录一些经历过程,年初的时候弄了台Mac Pro ; 现在在捣鼓啥呢

  angularjs nodejs
  objective-c golang

  乱乱的,就这样子吧,关机睡觉。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-346078-1-1.html 上篇帖子: 我是如何基于angular+requirejs+node做SPA项目架构的 下篇帖子: Node.js爬虫数据抓取乱码问题总结
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表