.NET建模

.NET建模
Deborah Melewski, Jack Vaughan

[2004/1/1]

建模和软件设计又将迎来新一波的高峰。UML和模型驱动架构MDA目前在业界越发引人注目,清晰地进行前置设计(design up front,译者注:这是过去批判得比较多的,是瀑布开发中的思想,在迭代开发中批判较多)也吸引了更多的兴趣。

建模的各种热闹气氛似乎在.NET这边还没有太大影响。和其它程序员一样,.NET开发者想得最多的就是编码。但建模的改进同样发生.NET领域,正如在java领域发生的一样。

软件应用的建模提供了一个辅助保证应用是否和用户需求相吻合的蓝图(blueprint)。在.NET软件开发方面投资的公司当然不愿意看到以下的场景发生:因为最初设计和架构的不合理,每隔几年就要把应用重写一遍。

最近的一些工具上的改进如Borland的Together Control Center和IBM的Rose XDE Developer都在帮助保证底层的代码和UML模型的同步。这些努力使得人们接纳UML,也使得建模事业得以稳步发展。

当然,.NET的复杂性导致了很多建模的挑战。对那些熟悉OO技术的人而言,为.NET建模还不是太困难。但并不是所有的开发人员都熟悉面向对象的,而且,也不是每个人都是设计可重用构件方面的专家。

事实上微软也发现为即将推出的Visual Studio .NET版本提供自己的建模产品是如此重要。这个软件巨人的加入意味着这个领域将变得更加有趣,竞争也更加激烈。

什么驱动模型?

现在而言,对象装配(object assembly)还是需要的。例如,微软新推出的Visual Basic .NET和旧版的Visual Basic是不兼容的,新的Visual Basic .NET要求开发人员要掌握一些新的面向对象的概念。

早在几年前,微软就在Visual Studio box中提供了一个基本的Rational Rose建模工具。并且在购买Visio几年前就在其工具中加入了Visio的一些特性。微软还曾经几次和第三方联合创建有用的开发者仓库。

但遗憾的是,在进入面向对象设计领域时,微软开发者竟然没有一个合适的工具,这不能不说是一个缺陷。现在情况可能会有所改善了,微软正在着手开发代号为“白马(Whitehorse)”的设计工具集。不过,越来越多的迹象显示,微软在进入建模领域的时候似乎并没有采纳UML或者MDA的标准。

模式和实践

为了帮助开发人员可视化OO的概念,为复杂的.NET应用建模。许多工具提供商,包括IBM Rational、Borland、Telelogic、Interactive Objects Software GmbH、 Computer Associates、Compuware、Embarcadero、微软及其它一些公司,要么为Visual Studio .NET开发环境专门推出新的建模工具,要么改进已有的工具。

Pittsburgh-based LogicLibrary公司的创办人之一以及分管技术的副总裁Brent Carlson认为,建模可以由不同层次中的任意多层来驱动,“例如,今天的业务过程建模,在图形环境中它对应为很多的过程工作流,将其转换为需求,这个转换过程并没有必要通过工具实现,但人工实现是需要的”。

logicliabrary.jpg

“我希望这个情况会得到改变,当然,这需要时间。通常说来,在.NET开发者考虑应用架构之前,很多工作都已经完成了,例如架构模型、.NET组件架构以及微软已经开发的各种模式和实践。”

为此,LogicLibrary和微软建立了伙伴关系,力图使得知识内容更加“可消费(consumable)”。这些都围绕为开发和部署架构定义的模式和实践展开,而且很多都是使用UML、模型驱动的。LogicLibrary管理这些内容并将它们提供给Visual Studio .NET的用户。
微软已经创建了各种参考应用,这些应用不仅包括.NET框架,还包括各种应用模块,它们是设计来解决各种特定问题的基于.NET框架的扩展。这些应用模块都是可以直接使用或者由企业进行扩展的预定义的各种代码段。这些解决方案就象是“包装好的最佳实践(best practices in a box)”。

LogicLibrary过去和微软一起致力于以一种基于模型的形式表示这些参考应用。LogicLibrary的Logidex for .NET产品强调的是Carlson所提的“信息宝藏(the glut of information issue)”,帮助企业更好地组织已有的应用,并和微软发布的参考应用放在一起,发挥作用。

“现在经常发生的情况是,你会发现信息太多而无处下手,” Carlson说,“但是,当一个开发者要开发一个.NET的应用,当他进入Visual Studio后,会看见如何进行数据存储,或者如何进行例外处理、如何在业务层做缓冲以提高性能的例子。这就好像有一个非常好的团队在帮助他,他会有一个飞跃,更快地构建出他的应用。”

IBM继续其.NET策略

Rational软件公司是OMG的UML标准的早期开发者之一,如今它是IBM的一部分。在收购了Rational之后,IBM在其portfolio开发平台的基础上有了一个完整的开发平台,并且包含了对.NET的支持。

IBM历史上一直偏向Java,而不是.NET。IBM 进入开发工具领域的时候就是倚重为其WebSphere中间件服务器等中间件技术服务的工具,显然,WebSphere是对基于Java的开发环境的补充。

Rational早在1999年就与IBM合作开发其Eclipse开发工具。也曾经和微软紧密合作开发for. NET的可视化建模工具。在IBM收购Rational之后,关于Rational是否继续支持微软技术遭到了怀疑,关于这一点,IBM和Rational都声明和微软的关系将不会改变,对微软技术的支持将一如既往。

实际上,IBM Rational提供了for .NET的覆盖面很广的全周期开发平台。其语言无关性保证它们对Java和其它的软件开发都是适用的。
“我们的目标是保证开发软件的我们的用户的成功,” IBM Rational的市场管理总监Roger Oberg如是说,“很显然,用户们对组件技术的选择是多样的。既有使用.NET的项目,同时也有使用Java和其它嵌入式技术的项目,这取决于企业的具体情况。”

xde.jpg

Oberg补充说,从某种程度上说,今天的Visual Basic的开发人员明天可能会转向Java。“对软件组织而言,学习UML,并从具体底层的组件技术中抽象出来是一个非常有效的策略,这样做的话,今天为一个.NET项目工作的人员可能明天就可以承担一个Java项目,我们的工具可以应用于这两种不同的组件技术,因此你学习的是如何去建模,UML是可以应用到Java和.NET技术上的。”

IBM Rational的Rose XDE Developer包括了Eclipse IDE,既可以在微软 Visual Studio .NET中运行,也可以在IBM WebSphere Studio中运行。“在一个环境中建模的成果可以重用到其它环境中;显然,我们还没有实现足够高的抽象,还没有将用户与底层的组件技术分开,如果达到那一步的话,用户甚至不需要知道底层技术是用的什么”。

白板,白马(Whitehorse)

自从公司老板Bill Gates宣布之后,微软就开始更新其建模工具,开发现在已经是众人皆知的“Whitehorse”软件。它是面向“为操作设计(design for operations)”的,允许用户在开发过程的早期定义底层的需求逻辑,并进行验证。

billgates.jpg

微软开发部产品管理负责人,Prashant Sridharan认为, “目前的情况是,在底层架构和架构小组之间几乎没有交流”。而在Whitehorse中,业务底层架构的设计师和服务的设计师是共同工作的。“秘密在于他们如何协作”,Whitehorse将改进不同的软件团队之间的沟通,他认为Whitehorse将和微软Visual Studio .NET的下一版本Whidbey一同推出,发行日期预计是2004年末。

ADT向Sridharan询问Whitehorse对UML建模的支持。回答是,软件内部没有对UML建模的支持,但可以通过插件的形式提供。

“UML只是很多不同的建模环境中的一种。在Whitehorse中采取的方法就稍有差异。我们努力创建一个建模的平台。”,这个平台将包括一个建模引擎以及一个建模框架。他认为这个建模框架将是公共的(“在推出的时候”),而且公司已经和一些选定的第三方在这一点上进行合作。

Sridharan对此寄予厚望,“我们希望开拓建模的新时代,我们坚信模型驱动的开发—当然,我们也相信传统的代码编写。”
他指出,Whitehorse和一些微软的开发人员过去使用的Rose UML工具有所不同。“UML是面向OO的”,Visio同样可以支持传统的OO建模。但是,当面向服务的架构(SOA)成为主流的趋势,系统的分布性越来越强,反应时间和安全等因素必须纳入考虑之中时,OO不一定是最好的解决方案。

和UML的偏离会让一些人感到困惑(在微软早期的Rose插件中是支持UML的),“微软现在要走的道路不是基于各种标准的,”基于San Francisco的设计与建模Embarcadero技术公司的总裁Greg Keller认为,“他们对UML或者MDA并不感兴趣,他们的工具将是好的,有效的,但其中将不包含除XML之外的其它标准。”

合作伙伴们的这些信息是否是从Whitehorse得到的呢?IBM Rational的主管Mike Devlin的回答是“是”。“对于如何建模,微软有自己的看法。我们的看法和他们的看法的差别在于,我们的不是绑定在特定的平台上的。”

微软也在投身于建模事业,仅仅这个事实本身已经说明了很多。Grady Booch这么认为,他是UML的创始人之一,如今是IBM的一员。“他们的进入是非常振奋的一件事情。”他补充说,微软的行动证明了IBM和Rational从90年代中期以来的努力方向是正确的。

.NET本质

.NET环境使用了特有的一些技术来帮助用户创建Web-based以及传统的肥客户端应用。例如,在ADO.NET中的ADO.NET技术和Web service。IBM Rational的Rose XDE Developer建模工具中提供了一个用来在对ADO.NET以及web service应用建模的profile。

“最大的问题在于人们在不知情的情况下试图改变Web service的定义,最后的结果是中断了使用这些Web service的客户端。”IBM Rational的开发主管Kevin Murphey认为,“这里,建模的作用非常关键,它可以帮助用户管理自己的Web service以及基于Web的应用,用户可以为GUI及其后台的代码建模,我们使得用户可以使用UML为这些建模并实现可视化。”

在.NET的程序语言中引入了一些对软件行业而言崭新的概念如代理(delegate)、事件(events)、特性(properties)或者索引(indexers)等,这些概念至少还从未在编程语言中出现过。

通过辅助的建模技术,IBM Rational Rose XDE Developer允许对这些概念还不熟悉的开发人员可视化地使用他们。对理解这些编程概念并且熟练的开发人员来说,还提供了无需掌握复杂的UML细节的的可视化建模支持。

值得一提的是最近正由OMG评审的可重用资产规约。该规约通过一个标准的描述方式提供了创建资产的能力。例如,资产可以是代码,代码以及关于代码的信息,描述代码的作用或者要求、测试的结果、版本历史或者支持可重用资产的关于代码的各种元信息。

IBM Rational的Oberg认为,对软件开发人员而言,这也许会带来巨大的好处。因为有关资产重用的符号已经不是一个新东西了,但却从来没有真正实现过。IBM Rational已经在XDE中加入了有关支持,可以使用这种描述语言搜索并得到需要的组件了。

Java/.NET之谜

随着.NET环境下提供的各种工具和标准越来越多,.NET环境下的建模和开发已经得到了飞速的发展,但.NET和Java之争仍然是一个问题。微软正在将java转换为.NET,但是对很多团队而言,Java还是第一站。当被问及IBM Rational将站在哪一边时,Oberg毫不犹豫地选择了Java。

“Java给用户们带来了太多,这正是为什么Java如今这么流行而且还将更加流行的原因,”Oberg说,“我们的顾客已经成功地使用Java开发了非常复杂和规模庞大的应用。而且具有可扩展性、鲁棒性,并且,Java是一个不被任何一家特定公司所把持的开放的环境。”

“更明确地说,如果有顾客在.NET和Java中间犹疑的话,IBM将会推荐Java,因为我们认为这将给顾客带来最大的利益,但是,如果顾客由于其它原因选择了.NET,我们也将继续帮助他们开发大型的.NET应用。”

在这些建模工具和标准中,适应性已经被证明是一个关键的因素。UML支持很多平台、语言和开发环境。MDA更是允许用户保持模型和代码的同步。另外,MDA还将UML扩展到代码生成和程序生命周期的其它领域;借助其平台无关性,MDA还支持到其它平台的接口。

LogicLibrary的Cralson认为他的团队已经可以很好地构建应用的架构,并且成功地从J2EE环境的应用转换到.NET上。“两个环境下的产品可以共用大部分的源码,因为微软为J#提供了强大的支持,可以直接以J#格式读入Java代码”

“大部分情况下,我们的大部分Java源码都可以以J#格式成功编译并且部署在.NET框架中,这对我的团队而言是个好事,对微软而言也同样如此,因为他们为传统的Java开发者提供了无缝的环境。” 中间的环节呢?

微软还将在建模领域投入更多的注意力,只要他还想维持和Java工具开发商的竞争局面。类似于Visual Studio的各种Java阵营的好用的IDE似乎在建模领域已经占据了优势地位,也就是说,微软现在扮演的是追赶者的角色,建模领域将成为一块即将火热的战场。

“Java社团接受各种建模概念的速度要快得多,工具也要流行的多”,Embarcadero公司的Keller认为,“微软现在拖着包袱在前进,他们的工具-Visual Studio-并没有提供太多清晰的可视化特性。”

“举例说吧,Compuware和其它公司正在竭力将VB开发者吸引到Java阵营中,微软在努力挽留VB的用户,而Java阵营正在争取他们。”
Keller指出,最近建模方面主要关注的是应用开发,有时候明显把数据建模排除在外了。

“大部分的努力都是为了简化应用开发。但并不停留在应用上,也不仅限于中间件上”,他说,“问题在于:如何简化从类到数据库组件的过程,以及中间的环节?”

更广泛使用的.NET

Visual Basic .NET的开发人员可能也想开发移动设备上的应用。总部位于Atlanta的AppForge公司的产品主管Bob Holt说,“打个比方,如果你想为一个Palm手持操作系统、Pocket PC、Symbian或者某些欧洲的智能手机写应用的话,你在Visual Basic上的经验可以继续有效,你可以在Visual Basic Studio .NET写程序,并进行测试,在写好之后,AppForge的MobileVB.NET软件开发平台可以将这些代码编译为这些手持设备上的应用。”

appforge1.jpg

MobileVB.NET使用了for Visual Studio的一个插件。AppForge 的操作将可以从Visual Studio中多出来的一个菜单中得到。用户可以通过和创建桌面应用同样的方式使用各种Form。

按照Holt的说法,为Visual Studio .NET环境开发这些基于UML的插件已经很好地解决了建模的方方面面。在设计好之后,就可以使用Mobile VB.NET。

企业环境中典型的移动应用是具有组合框、连接指示以及数据库逻辑的目录操作。通过无线设备远程操作的用户可以在中央数据库上进行目录分析等工作。

AppForge跨越了包括航空、运输、旅社、医药和财政的多个市场领域。可口可乐使用AppForge开发的产品,通过手持设备、顾客序列号和连接来统计关于可口可乐售货机上卖出了什么,什么还没有被卖出。

(自 adtmag,袁峰 摘译,不得转载用于商业用途)

转载于:https://www.cnblogs.com/voyage/archive/2004/07/04/21002.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/477061.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Flume的美团日志收集系统(一)架构和设计

背景 美团的日志收集系统负责美团的所有业务日志的收集,并分别给Hadoop平台提供离线数据和Storm平台提供实时数据流。美团的日志收集系统基于Flume设计和搭建而成。 《基于Flume的美团日志收集系统》将分两部分给读者呈现美团日志收集系统的架构设计和实战经验。 第…

LintCode 1690. 朋友推荐(二分插入)

1. 题目 某交友网站会给除了第一个用户以外的每个新注册的用户推荐一位之前已经注册过并且性格值和他最相近的用户,如果有多人满足条件则选择性格值较小的。 给定数组val[]表示按时间顺序注册的 n 位用户的性格值,输出一个大小为 n-1 的数组&#xff0…

WinForm与脚本的交互

这是去年学习SmartClient时写下的,有兴趣可以看看 将Winform Control嵌入IE,很多时候需要JS脚本与Control进行交互。一方面是在脚本中使用控件的属性,调用控件的方法,另外一方面是脚本中能够响应控件的事件。对于第一个问题较为简单&#…

我用AI大模型帮我写公众号赚钱!

文 |卖萌酱大家好,我是卖萌酱。最近太忙了,有很多想写的文章,但实在精力匮乏。怎么办,不能停更吧?就在这时,卖萌酱听到了一个新名词:AIGC。什么意思呢?我们知道互联网上的早期内容&a…

Nacos部署中的一些常见问题汇总

开个帖子,汇总一下读者经常提到的一些问题 问题一:Ubuntu下启动Nacos报错 问题描述 使用命令sh startup.sh -m standalone启动报错: ./startup.sh: 78: ./startup.sh: [[: not found./startup.sh: 88: ./startup.sh: [[: not found./startu…

土木工程正在沦为“天坑”专业…

文 | 羿阁(发自凹非寺)源 | 量子位一份转专业录用名单,直接把土木工程推向了舆论焦点。事情是这样的。前不久,湖南大学公示了2022年本科生转专业的一份名单。然后网友们惊奇地发现,土木工程学院共转出98人,…

Spring Cloud Alibaba基础教程:Nacos的集群部署

前情回顾: 《Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现》《Spring Cloud Alibaba基础教程:支持的几种服务消费方式》《Spring Cloud Alibaba基础教程:使用Nacos作为配置中心》《Spring Cloud Alibaba基础教程&a…

智能客户端研究笔记(三)

本文大量引用了别人的文章,引用自http://www.microsoft.com/china/community/program/originalarticles/TechDoc/smartclient.mspx发布程序 1、在发布和更新服务器上设置一个虚拟目录(如:SmartClient)将应用组件的所有文件放置…

3月14日 我用Python几十行代码为女朋友画了一个爱心

今天是个特殊的日子,圆周率日,哈哈!来对你爱的人表达爱吧! 女朋友就是我爱人啦!😁 # -*- coding:utf-8 -*- # Python Version: 3.7 # Time: 2020/3/14 13:14 # Author: Michael Ming # Website: https://m…

Pytorch显存分配机制与显存占用分析方法

文 | Connolly知乎(已授权)源 | 极市平台作者最近两年在研究分布式并行,经常使用PyTorch框架。一开始用的时候对于PyTorch的显存机制也是一知半解,连蒙带猜的,经常来知乎上来找答案,那么我就吸收大家的看法…

Spring Cloud Stream 使用延迟消息实现定时任务(RabbitMQ)

应用场景 我们在使用一些开源调度系统(比如:elastic-job等)的时候,对于任务的执行时间通常都是有规律性的,可能是每隔半小时执行一次,或者每天凌晨一点执行一次。然而实际业务中还存在另外一种定时任务&am…

LeetCode 1380. 矩阵中的幸运数(set)

1. 题目 给你一个 m * n 的矩阵,矩阵中的数字 各不相同 。请你按 任意 顺序返回矩阵中的所有幸运数。 幸运数是指矩阵中满足同时下列两个条件的元素: 在同一行的所有元素中最小在同一列的所有元素中最大 示例 1: 输入:matrix …

GARFIELD@10-07-2004

tit for tat转载于:https://www.cnblogs.com/rexhost/archive/2004/10/07/49560.html

DeepMind 发了篇论文,把我看笑了

文 | severus近日,曾开发出举世瞩目的 AlphaGo 的 DeepMind,在 ArXiv 上发表了一篇文章,名为:Meaning without reference in large language models文中提到,大参数规模的语言模型是已经具备了部分类人智能的&#xff…

Spring Cloud Stream消费失败后的处理策略(三):使用DLQ队列(RabbitMQ)

应用场景 前两天我们已经介绍了两种Spring Cloud Stream对消息失败的处理策略: 自动重试:对于一些因环境原因(如:网络抖动等不稳定因素)引发的问题可以起到比较好的作用,提高消息处理的成功率。自定义错误…

LeetCode 1382. 将二叉搜索树变平衡(中序遍历+二分递归)

1. 题目 给你一棵二叉搜索树,请你返回一棵 平衡后 的二叉搜索树,新生成的树应该与原来的树有着相同的节点值。 如果一棵二叉搜索树中,每个节点的两棵子树高度差不超过 1 ,我们就称这棵二叉搜索树是 平衡的 。 如果有多种构造方…

电影:『新警察故事』

【电影名称】:『新警察故事』 【主 演】: 成龙 谢霆锋 杨采妮 蔡卓妍 吴彦祖  【导 演】: 陈木胜 【内容简介】:《新警察故事》是成龙英皇电影公司的处女作,投资超过1亿6000万港元,请来香港顶尖电影…

NLP顶级赛事LIC2022霸榜经验分享!

语言是人类传递信息最重要的媒介,让机器理解语言并进行交互是人工智能的重要挑战。为推动语言与智能领域的技术发展和应用,中国中文信息学会、中国计算机学会和百度公司连续五年联合举办“语言与智能技术竞赛”,为中文NLP研究者和开发者提供同…

Spring Cloud Zuul中使用Swagger汇总API接口文档

有很多读者问过这样的一个问题:虽然使用Swagger可以为Spring MVC编写的接口生成了API文档,但是在微服务化之后,这些API文档都离散在各个微服务中,是否有办法将这些接口都整合到一个文档中?之前给大家的回复都只是简单的…

LeetCode 1381. 设计一个支持增量操作的栈(deque/数组)

1. 题目 请你设计一个支持下述操作的栈。 实现自定义栈类 CustomStack : CustomStack(int maxSize):用 maxSize 初始化对象,maxSize 是栈中最多能容纳的元素数量,栈在增长到 maxSize 之后则不支持 push 操作。void push(int x)…