技术门诊是51CTO社区品牌栏目,每周邀请一位客座专家,为广大技术网友解答疑问。从热门技术到前沿知识,从技术答疑到职业规划。每期一个主题,站在最新最热的技术前沿为你引航!

   本期特邀.NET与项目管理专家、畅销书作者李天平老师,针对.NET开发与项目管理问题给予解答,欢迎网友积极提问,与专家一起讨论!

查看本期门诊精彩实录:http://doctor.51cto.com/develop-277.html

专家博客:http://litianping.blog.51cto.com/

精选本期网友提问与专家解答,以供网友学习参考。

【263期门诊集锦】共同探索.NET开发与项目管理中的精髓_第1张图片

Q: 很高兴能得到专家的亲自指点的机会,我现在还只是一个大二的学生,学的也是.NET软件开发,问的问题可能有些幼稚,希望见谅。

我的问题有两个,第一个是.NET开发的接口为什么那么少?不像java,很多东西都可以直接用人家发出来的接口。

第二个:asp.net做的网站经常被***光顾,拿到webshell而提取服务器,我们在做项目中应该从什么方面来注意这个问题?

A: 第一个问题,我感觉还是接触知识面的问题。第二个问题,主要应该做好windows的系统安全防范,补丁及时更新,安全相关防火墙软件,另外确保自己写的代码没有注入漏洞,做好页面权限控制。很多时候安全问题并非ASP.NET的错,更多时候是由于技术人员的安全意识问题。

Q: 很高兴能得到专家的亲自指点的机会,在这里表示万分感谢!

.Net 标准控件的效率通常比较慢,在一个项目中会自定义控件还是使用第三方控件?

在提高效能方面,主要是在哪些方面做改善?

A: 在控件使用方面,一般需要考虑项目的性质,如果是网站性质的,性能要求比较高,建议少用控件,控件会产生很多页面负载,导致页面加载比较慢。如果是管理系统类内部项目,由于并发不大,通过控件可以大大提高开发效率。具体提高性能方法方面,建议看一下《项目中的.NET》的第15章大型网站的性能优化与安全有详细的介绍。

Q: 很高兴能得到专家的亲自指点的机会,熟知.NET的开发、部署、实施都会存在各种漏洞和不安全因数,不知您是如何实现安全保障的?还有.NET与其它开源软件相比其开发、维护成本您认为如何?

A: 系统的安全往往来自于三个方面,开发的软件本身有漏洞;操作系统;硬件网络安全;人们印象中的.NET安全问题其实大多由于.NET软件必须部署在windows平台所致,过去的windows系统的一些安全问题让人有一种误解。软件方面更多考虑注入***,安全验证等方面;系统方面做好各种补丁和防火墙安全软件;多加监控没有人们想象的那么差。其实有很多大型系统是基于.NET开发的。很多时候安全问题并非.NET的罪过。

Q: 李老师,您好,很高兴有机会能跟您请教一下.net相关技术。我想提问3个问题,请老师能够给予解答指导,谢谢。

1、很多人认为.netjava一样都是高级语言,封闭了很多的实现细节。在强大的ide工具vs的帮助之下,运用先进的可视化控件技术来实现编程,通过拖拖拽拽就能快速搭建一个系统。但是vs提供的这些控件感觉都是个半成品,很难达到实际生产的要求,在这种背景之下,很多的第三方控件出现了,比如:devexpressaspnetpager等等。为什么微软不开发一套官方的统一的强大的能开发商业系统的控件呢?就像jqueryjquery ui一样。

2、早在09年的时候,我就在一项目中使用了您的动软代码生成器,当时觉得很好很不错,也就在那时知道了你的名字。这么多年下来,您认为动软代码生成器能成功的运作起来,其原因是什么呢?后来我在项目中,也用到了很多其它的代码生成器,甚至是自己开发的一套代码生成器。作为一个成熟的成功的产品,动软代码生成器成功的原因是什么呢?动软代码生成器的开发模式是怎样的,是怎么一步一步发展起来的。

3、我们都知道最新的vs2012开发工具和win8windows phone 8 sdk开发包都已经提供下载了,您认为在这个全新领域,个人开发者应该如何识别机会、抓住机遇?您认为未来.net发展的趋势是什么?

A: 1. 至于微软为什么没有开发这样的控件类库,我不能确切的知道他的内部战略。但我的个人感觉微软作为这样的一家庞大公司不可能把产业链上所有的事情都做了,也没有那么大的精力,总有一些创新和改变来自于草根和细分的领域,创造很多各种各样的机会。大树底下会长草。

2. 动软代码生成器的成功,个人感觉来源于底层现实的需求,不是玩一个概念,而是实际带来的价值和便利,同时坚持把产品做好,才能让更多的用户进行口口相传。“用智慧改变世界,用创造改变生活,其实,工作也很快乐!” 是动软最原始的理想和文化,先谈价值再谈价格是动软一直奉行的原则。

3.全新的领域充满机会,也充满挑战,机会和机遇都需要建立在一定的积累的基础上,早一步是先烈,晚一步是红海,所以,坚持合适的时间做合适的事情是个好的原则。

Q: 李老师:

您好!

我单独参加过软件工程师培训,学过.NET,也学过JAVA,但是一直未入开发这一行业。

我需要如何才能进入角色?

我现目前在做虚拟化,统一沟通项目规划、实施方面的工作。

因为学习和项目还是有差距,你认为如何进入这人开发人员角色。

有什么好推荐?

A: 如果真的想要进入这一行,需要有意识的从相关小事开始做起,增加这方面的锻炼和实践经验。当有了一定的积累,可以从事这个工作的时候,哪怕最基层的工作,就可以开始进入这个领域。随着经验和能力的提升,慢慢就会真正成为这个角色。目标决定过程,什么样的目标决定了这个过程中走什么样的路。

Q: 目前net开发,对应asp.net mvc越来越重视了,但是mvc经过几个版本的更新,使用起来还是没有传统的asp.net控件拖拉式的方便快捷,尤其时在对原来项目升级时,遇到问题;对于项目开发,我们应该使用更为成熟的东西,还是不断去新呢,有时很是难以取舍,对于传统的asp.net开发遇到稳定在百度中基本解决,但是用mvc4开发时,很多问题让我焦头烂额;有时上边压着用新技术其实感觉就是在投标中说明一个亮点,客户对于新的东西其实没有什么真正的概念

A: 你的问题可能不简单是个技术问题,我从几个方面分析一下,

1. 对于技术而言,只有最适合的技术,没有最好的技术。是否采用新技术,需要根据项目的情况和个人的实际情况分析,采用哪种技术。项目的目标是实现功能,不是为了技术而技术。

2. 新技术往往带有一些不确定性,不成熟的风险,及自身不熟悉,造成开发效率低,可能带来的项目开发延期和更多的开发成本。

3. 如果是为了投标而以新技术作为亮点,这个问题就不是技术问题了,从商务的角度讲,也许可以带来项目或者带来更多的利润,来支撑你们提供更多的开发成本。否则,如果周期压得很紧,风险可能会比较大,可能会导致项目的失败和延期。

4. 另外的角度分析webformMVC有着各自的优势,根据不同的项目和需求选择合适的技术,webform有着各种拖拉控件虽然方便快捷,但是这是以性能作为代价换来的。如果是企业内部管理系统类的项目,其实目前你们用webform比较合适,并发没有那么大,性能损失完全可以承受,又你们比较熟,开发效率高,节省成本。如果是你们的项目规划确实用到MVC的某些特性对你们的项目更合适,那么你们需要分析一下,预留一定的项目缓冲时间,学一下了。

关键的问题,需要你们自己做好项目分析,内部充分沟通,再做技术选型。  

Q: 老师好,从个人的一年多的开发经历来讲,我觉得.net平台的优点在于入门比较容易,开发周期短,基于可视化编程,我不会特别留意前台界面的设计,省去了很多麻烦,但是带来了更多麻烦,很多底层的东西不清楚,导致了出现问题时会一头雾水,当然,最重要的是,同一个功能,比如用户登录验证,我可以再前台用Javascript去完成它,但是更好的办法是利用面向对象语言的特征,自己完成Class的初始化和Interface的实现,大家都明白这样子降低耦合,有利于程序后期的维护和扩展,问题是在实际的开发过程中,如何选择?怎样更清楚的认识和了解底层的东西?linux的乐趣在于很多基础命令的惊艳,如果在我们自己的开发中,能够容易的在底层命令和封装好的Interface之间随意切换,岂不是美事一桩?(相信很多.net的同行不愿意被别人理解为组装工程师。

A: 1..NET 的初衷就是省去一些内部的技术细节,而专注于自己应用业务的开发,毕竟,做开发不是为了技术而技术,是为了创造价值,是为了实现项目功能。

2. 其次,大部分只有初级开发的时候,才会只通过可视化编程或者拖拽控件,现成类库实现一些简单的应用,一个高级的开发人员或架构师,同样会去研究深层次的内容,面向对象,设计模式,架构等等。大型的项目很多都是需要自己写的,这样才能更好的扩展和可维护。这和浅层次的简单开发并不是一回事,.NET开发也有底层,只是有的人把日常从事的工作让自己误认为这是.NET的全部。

 

Q: 李老师,你好。经过一年多的.Net开发,我从一个完全不懂开发的人成为了刚刚入门的小菜,也逐渐产生了疑问。

一开始的开发,我也是拖控件,在后台写相关联的事件,开发起来效率真的很高,可是随着数据量和业务逻辑逐渐增多,网站的运行效率也越来越慢,最近我在尝试脱离这些服务器控件,使用一些js开发框架来完成前台的展示,将C#作为处理服务器数据的载体。

我想问下,Asp.Net中,这样做的团队或者企业是否很多呢?我应该看看哪些相关的知识呢?

A: 小项目往往通过控件可以短平快实现,可提高开发效率,因为对系统性能和复杂度要求不高。真正的大项目往往要考虑性能,安全性,并发负载,扩展,灵活维护等等因素,将很少使用控件拖拽实现。同时会自己封装一些组件或者模块化实现相关功能。这好比过去的傻瓜相机可以满足基本的照相需求,但是专业摄影,还是需要单反或者更专业的相机一样的道理。还是需要学习更深层地专业知识才能照出更专业的照片。