随笔分类 -  项目经验

【项目】 技术选型 - 平台和语言
摘要:又是一个很有争议的话题世界上有这么多的技术平台和解决方案; windows, linux, .NET, java, PHP, C++, C, Python 等等等。。在实现项目时,为什么我们选择其中一个,而不是其他呢?1.团队现有团队的组成 (对大部分情况来说 决定性因素)组建新团队的难度市场上是否容易找到该技术类型的人,(有些方面的人在公司所在地或者说国内不好找)如果找不到该类型的人,是否容易培养2.适应性在某些特定领域,某种技术有特别的优势或者劣势 (例如一般不会吧C++拿来做网站)由于历史原因,在某些行业,某种技术有特别的优势目标平台和语言本身的成熟度第三方支持,如商业公司,组件和解决方 阅读全文

posted @ 2011-10-16 12:40 听说读写 阅读(483) 评论(0) 推荐(0)

【设计原则和建议】 方法
摘要:方法 1.一个方法内的代码不能超过30行.绝大部分方法都可以在30行内结束.这是一种强迫开发者优化设计和代码的方式. 2.什么样的方法不应该抛出异常?静态构造函数,抛出以后整个类型就再也无法使用了.构析函数.属性的get方法 (有些类的设计会违背这个特性).Dispose (理论上也不应该抛出异常,不过有些设计已经抛出了异常). 3.还没有实现的方法应该抛出NotImplementedException 异常. 4.移除没有被调用到的方法 . 5.方法命名推荐Pascal命名.推荐动词+名词方式 例如 GetUser, DisableUser如果在类的实例方法上,推荐动词做方法名... 阅读全文

posted @ 2011-10-12 13:40 听说读写 阅读(4646) 评论(11) 推荐(7)

【设计原则和建议】 方法输入参数
摘要:个人在多年的开发中对设计有一些自己的想法,在此总结出一些规则希望和大家共同探讨当然很多设计大家应该已经知道了,当然对于某些设计可能每个人有不同的看法本系列文章不是为了讨论基本的语法,而是介绍和讨论一些设计的规则1.在允许的情况下,优先使用父类作为参数类型其好处是允许该函数有更大的适用范围,有更多的第三方可以调用该方法 (原来持有父类和其他子类变量的第三方现在也可以调用了)(可别为了更大的参数范围把变量都声明为Object了) class InputParameter { //如果可以 参数类型优先选择父类 public void Method1(IEnumer... 阅读全文

posted @ 2011-10-11 10:13 听说读写 阅读(2168) 评论(10) 推荐(4)

一次HTTP请求中的缓存
摘要:一个HTTP Request从用户点击的一瞬间,到服务器返回请求,一般会经过以下类型的缓存(按照由客户端到服务器端的顺序)1.浏览器端存储:HTML5中的本地存储功能允许在浏览器端保存数据.Flash等第三方插件也有类似的功能.JavaScript保存一些数据在当前Context也算这种类型.2.浏览器端文件缓存HTTP协议中在时间未过期等情况下,不请求服务器数据而直接使用本地的文件 (请参考HTTP协议中关于缓存控制的部分)常用于htmlJavaScriptcss等文件的缓存,以减少请求次数3.HTTP缓存304:HTTP协议中,如果服务器文件未发生变化,不返回用户请求的数据,而只是返回一个 阅读全文

posted @ 2011-10-10 12:00 听说读写 阅读(5831) 评论(6) 推荐(6)

为单元测试等非WebBase的项目伪造一个HttpContext , Session 和HttpHeader
摘要:在做单元测试的时候HttpContext.Current是为null的而有些dll是和HttpContext绑定的(很大原因是...net大部分用于web项目)或者是试图在windows form 或者console中使用这些dll就挂了...当然HttpContext.Current是可以赋值的...那么最最简单的方法就是直接new一个HttpContext给它啦HttpRequest request = new HttpRequest("", "http://localhost", ""); HttpContext.Current 阅读全文

posted @ 2011-03-31 18:15 听说读写 阅读(1912) 评论(1) 推荐(0)

某项目要调用现有的100多个DLL 四 把不能序列化的实体类变成可以序列化的
摘要:由于跨域访问 要求所有的输入输出参数 要么是继承MarshalByRefObject, 要么标记为可序列化由于这些dll又是其他人开发的 我们没法修改它们继承与 MarshalByRefObject , 而且很多类型已经有了继承了...那么只好在把类型变成可序列化上做功夫了以前有写过一篇文件如何想办法把不可序列化的类 变为可序列化的不可序列化的类 声明如下:[代码]话说这个类写的真是够烂的..... - -#只要实现一个它的子类 并实现ISerializable 接口 就可以在需要传递InputParameter的地方用它的子类代替它代码如下:[代码]C#里面 接口不能定义构造函数....真是 阅读全文

posted @ 2011-02-15 18:04 听说读写 阅读(546) 评论(0) 推荐(0)

某项目要调用现有的100多个DLL 三 先解决为一个类型做一个跨域的问题
摘要:将同类的操作Wrap在同一个类型中,如以下代码: [代码]这是一个简单的wrap 用于调用另外一个dll的OPATest 类 , 同时测试一下代码是否运行在独立的域中构造函数变为Protected的主要原因是禁止直接通过构造函数新建wrap实例,强迫通过DefaultInstance的方式调用代码 (这样才是应用程序隔离的)不变成Private的原因是之后还需要有继承 如果把父类的构造函数设置为private 那么子类也构造不了但是在当前代码中 你应该把protected改为public 才可以正常的运行, 为了解决跨域的问题 将wrap类继承于 MarshalByRefObject ,Opa 阅读全文

posted @ 2011-02-14 11:40 听说读写 阅读(530) 评论(0) 推荐(0)

某项目要调用现有的100多个DLL 二 最最简单原型的思考
摘要:最最简单的原型:假设某个类库提供了一个方法 [代码]Input Onput是两个类, 分别代表了输入输出参数的格式 ,没有实现可序列化Serializable, 不能直接跨域UserManager不是可序列化 不能用Marshal by value的方式跨域操作UserManager没有继承MarshalByRefObject 无法通过Marshal by refrence 的方式跨域操作这里有几个小小的技术难点1.如何让没有实现Serializable的类,变成跨域操作所需的可以序列化的类 (下面的章节解决这个问题) 2.有没有一种简单的方式可以实现跨域的简单代码操作, 就像平常的dll直接 阅读全文

posted @ 2011-01-28 21:16 听说读写 阅读(529) 评论(0) 推荐(0)

某项目要调用现有的100多个DLL 一 开始
摘要:某个项目需要使用很多内部其他Team的DLL 和第三方的DLL (大概百来个吧......这是什么鬼啊...可怕的历史,又不能改 这些dll都上生产环境了)如果直接用dll引用之后调用 会有很多很多的问题  1.程序的质量会下降到 这百来个dll中质量最差的一个 (万一某些人在代码里面写什么lock(string) 啊什么的....死啦死啦的)  2.很多dll需要特殊的配置 把这些东西都放在web.config就准备等死吧...也不知道哪些是哪些,维护很容易死人  3.有些dll也许内部做了什么cache啊 或者开了什么socket端口啊 这种东西.. (有个组件TMD的内部缓冲了1G的数据 阅读全文

posted @ 2011-01-28 15:41 听说读写 阅读(685) 评论(1) 推荐(0)

导航