您好,欢迎光临有路网!
框架设计指南:构建可复用.NET库的约定、惯例与模式(第3版)
QQ咨询:
有路璐璐:

框架设计指南:构建可复用.NET库的约定、惯例与模式(第3版)

  • 作者:(美)Krzysztof Cwalina(克里斯托夫·克瓦里纳),Jeremy Barton(杰里米
  • 出版社:电子工业出版社
  • ISBN:9787121450105
  • 出版日期:2023年03月01日
  • 页数:456
  • 定价:¥150.00
  • 分享领佣金
    手机购买
    城市
    店铺名称
    店主联系方式
    店铺售价
    库存
    店铺得分/总交易量
    发布时间
    操作

    新书比价

    网站名称
    书名
    售价
    优惠
    操作

    图书详情

    内容提要
    本书从*基本的设计原则和准则出发,全方位介绍了设计框架的*佳实践,是微软工程师从.NET Framework开发伊始到现如今的.NET这二十来年间宝贵经验的总结。 与第2版发布时的2008年相比,今天的软件开发范式用翻天覆地来形容也不为过,容器化、云服务、跨平台、DevOps等,都对今天的软件***和框架设计者提出了更高的要求。本书对第2版的内容进行了全面的更新,以适应当下发展的潮流。本书虽然是面向.NET平台上的框架设计的,但对其他平台的框架设计同样具有非凡的借鉴价值。通过阅读本书,读者可以了解到如何设计出一个对使用者而言简单、易用且具有一致性的**框架。
    目录
    导论1 1.1 设计精良的框架的特质2 1.1.1 设计精良的框架是简单的2 1.1.2 设计精良的框架设计成本高昂3 1.1.3 设计精良的框架充满权衡4 1.1.4 设计精良的框架会借鉴过往经验5 1.1.5 设计精良的框架旨在不断发展5 1.1.6 设计精良的框架是完整统一的6 1.1.7 设计精良的框架是一致的6 2 框架设计基础7 2.1 渐进式框架9 2.2 框架设计基本原则12 2.2.1 场景驱动设计原则12 2.2.2 低门槛原则18 2.2.3 对象模型自文档化原则22 2.2.4 分层架构原则27 总结29 3 命名准则30 3.1 大小写约定30 3.1.1 标识符的大小写规则31 3.1.2 大写首字母缩写词33 3.1.3 大写复合词和常见术语36 3.1.4 大小写敏感38 3.2 通用命名约定38 3.2.1 词汇选择39 3.2.2 使用简写和首字母缩写词41 3.2.3 避免使用特定于编程语言的名称41 3.2.4 命名现有 API 的新版本43 3.3 程序集、DLL 和包的命名45 3.4 命名空间的命名47 3.4.1 命名空间和类型名称的冲突48 3.5 类、结构体和接口的命名50 3.5.1 泛型参数的命名52 3.5.2 通用类型的命名52 3.5.3 枚举的命名53 3.6 类型成员的命名55 3.6.1 方法的命名55 3.6.2 属性的命名55 3.6.3 事件的命名57 3.6.4 字段的命名58 3.7 命名参数59 3.7.1 命名运算符重载参数59 3.8 命名资源60 总结60 4 类型设计准则61 4.1 类型和命名空间63 4.2 在类和结构体之间选择66 4.3 在类和接口之间选择68 4.4 抽象类设计75 4.5 静态类设计76 4.6 接口设计77 4.7 结构体设计79 4.8 枚举设计83 4.8.1 设计标记枚举89 4.8.2 添加枚举值92 4.9 嵌套类型93 4.10 类型和程序集元数据95 4.11 强类型字符串97 总结100 5 成员设计101 5.1 一般成员设计准则101 5.1.1 成员重载101 5.1.2 显式实现接口成员111 5.1.3 在属性和方法之间选择114 5.2 属性设计119 5.2.1 索引属性设计120 5.2.2 属性变更通知事件123 5.3 构造函数设计124 5.3.1 类型构造函数准则130 5.4 事件设计132 5.5 字段设计136 5.6 扩展方法139 5.7 运算符重载146 5.7.1 重载 operator==149 5.7.2 转换运算符149 5.7.3 比较运算符151 5.8 参数设计152 5.8.1 在枚举参数和布尔参数之间选择154 5.8.2 参数验证156 5.8.3 参数传递159 5.8.4 参数数量可变的成员162 5.8.5 指针参数165 5.9 在成员签名中使用元组166 总结171 6 可扩展性设计172 6.1 可扩展性机制172 6.1.1 非密封类172 6.1.2 受保护的成员174 6.1.3 事件和回调175 6.1.4 虚成员180 6.1.5 抽象(抽象类和接口)181 6.2 基类183 6.3 密封185 总结187 7 异常188 7.1 抛出异常192 7.2 选择抛出正确的异常类型196 7.2.1 错误消息设计199 7.2.2 异常处理200 7.2.3 包装异常205 7.3 使用标准异常类型206 7.3.1 Exception和SystemException206 7.3.2 ApplicationException207 7.3.3 InvalidOperationException207 7.3.4 ArgumentException、ArgumentNullException 和 ArgumentOutOfRangeException207 7.3.5 NullReferenceException、IndexOutOfRangeException 和 AccessViolationException208 7.3.6 StackOverflowException208 7.3.7 OutOfMemoryException209 7.3.8 ComException、SEHException和ExecutionEngineException210 7.3.9 OperationCanceledException 和 TaskCanceledException210 7.3.10 FormatException210 7.3.11 PlatformNotSupportedException211 7.4 设计自定义异常211 7.5 异常和性能212 7.5.1 测试者-执行者模式212 7.5.2 Try模式213 总结216 8 使用准则217 8.1 数组217 8.2 特性220 8.3 集合223 8.3.1 集合参数224 8.3.2 集合属性和返回值225 8.3.3 在数组和集合之间选择229 8.3.4 实现自定义集合230 8.4 DateTime 和 DateTimeOffset231 8.5 ICloneable233 8.6 IComparable<T> 和 IEquatable<T>234 8.7 IDisposable236 8.8 Nullable<T>236 8.9 Object237 8.9.1 Object.Equals237 8.9.2 Object.GetHashCode238 8.9.3 Object.ToString240 8.10 序列化241 8.11 Uri243 8.11.1 System.Uri 的实现准则244 8.12 System.Xml 的使用245 8.13 相等运算符246 8.13.1 值类型上的相等运算符248 8.13.2 引用类型上的相等运算符248 9 通用设计模式249 9.1 聚合组件249 9.1.1 面向组件的设计251 9.1.2 因子类型253 9.1.3 聚合组件准则254 9.2 异步模式256 9.2.1 选择异步模式256 9.2.2 基于任务的异步模式258 9.2.3 异步方法的返回类型263 9.2.4 为现有的同步方法制作一个异步变体265 9.2.5 异步模式一致性的实现准则268 9.2.6 经典异步模式272 9.2.7 基于事件的异步模式273 9.2.8 IAsyncDisposable273 9.2.9 IAsyncEnumerable<T>273 9.2.10 await foreach 的使用准则274 9.3 依赖属性276 9.3.1 依赖属性设计277 9.3.2 附加属性的设计279 9.3.3 依赖属性校验280 9.3.4 依赖属性变更通知280 9.3.5 依赖属性中的值强制281 9.4 Dispose 模式282 9.4.1 基本Dispose模式284 9.4.2 可终结类型290 9.4.3 限定作用域的操作293 9.4.4 IAsyncDisposable296 9.5 工厂299 9.6 LINQ 支持303 9.6.1 LINQ 概览303 9.6.2 实现 LINQ 支持的方法304 9.7 可选功能模式309 9.8 协变和逆变312 9.8.1 逆变315 9.8.2 协变316 9.8.3 模拟协变模式319 9.9 模板方法321 9.10 超时323 9.11 XAML 可读类型324 9.12 操作缓冲326 9.12.1 数据转换操作338 9.12.2 向缓冲区中写入固定大小或预定大小的数据343 9.12.3 使用 Try-Write 模式向缓冲区中写入数据344 9.12.4 部分写入缓冲区和OperationStatus348 9.13 *后353 附录A C#编码风格约定354 A.1 通用风格约定355 A.1.1 花括号的使用355 A.1.2 空格的使用357 A.1.3 缩进的使用358 A.1.4 垂直空白360 A.1.5 成员修饰符361 A.1.6 其他362 A.2 命名约定367 A.3 注释368 A.4 文件组织369 附录B 过时的准则371 B.3 命名准则中的过时准则371 B.3.8 命名资源371 B.4 类型设计准则中的过时准则372 B.4.1 类型和命名空间372 B.5 成员设计准则中的过时准则374 B.5.4 事件的设计374 B.7 异常设计准则中的过时准则375 B.7.4 设计自定义异常375 B.8 常见类型使用准则中的过时准则376 B.8.10 序列化376 B.9 通用设计模式中的过时准则383 B.9.2 异步模式383 B.9.4 Dispose 模式394 附录C API规范示例398 附录D 不兼容变更403 D.1 修改程序集404 D.1.1 改变程序集的名称()404 D.2 添加命名空间405 D.2.1 添加与现有类型冲突的命名空间()405 D.3 修改命名空间405 D.3.1 修改命名空间的名称或改变大小写()405 D.4 移动类型405 D.4.1 通过 [TypeForwardedTo] 移动类型()405 D.4.2 不通过 [TypeForwardedTo] 移动类型()406 D.5 删除类型406 D.5.1 删除类型()406 D.6 修改类型407 D.6.1 密封一个非密封的类型()407 D.6.2 解封一个密封类型()407 D.6.3 改变类型名称的大小写()407 D.6.4 改变类型名称()407 D.6.5 改变类型的命名空间()408 D.6.6 为结构体添加 readonly 修饰符()408 D.6.7 从结构体中移除 readonly 修饰符()408 D.6.8 为现有接口添加基接口()408 D.6.9 为同一个泛型接口添加第二个声明()409 D.6.10 将类变更为结构体()409 D.6.11 将结构体变更为类()410 D.6.12 将 struct 变更为 ref struct()410 D.6.13 将 ref struct 变更为(非ref)struct()410 D.7 添加成员411 D.7.1 通过 new 修饰符掩盖基类成员()411 D.7.2 添加抽象成员()411 D.7.3 为非密封类型添加成员()411 D.7.4 为非密封类型添加覆写成员()412 D.7.5 为结构体添加**个引用类型字段()412 D.7.6 为接口添加成员()412 D.8 移动成员413 D.8.1 将成员移动到基类中()413 D.8.2 将成员移动到基接口中()413 D.8.3 将成员移动到派生类型中()413 D.9 删除成员413 D.9.1 从非密封类型中删除终结器()413 D.9.2 从密封类型中删除终结器()414 D.9.3 删除非覆写成员()414 D.9.4 删除虚拟成员的override()414 D.9.5 删除抽象成员的override()414 D.9.6 删除或重命名可序列化类型的私有字段(?)415 D.10 重载成员415 D.10.1 为成员添加**个重载()415 D.10.2 为引用类型参数添加可选参数重载(?)416

    与描述相符

    100

    北京 天津 河北 山西 内蒙古 辽宁 吉林 黑龙江 上海 江苏 浙江 安徽 福建 江西 山东 河南 湖北 湖南 广东 广西 海南 重庆 四川 贵州 云南 西藏 陕西 甘肃 青海 宁夏 新疆 台湾 香港 澳门 海外