2013年10月11日星期五

企业架构研究总结(44)——企业架构与建模之Archimate视图和视角 - 闹市闲云

本邮件内容由第三方提供,如果您不想继续收到该邮件,可 点此退订
企业架构研究总结(44)――企业架构与建模之Archimate视图和视角 - 闹市闲云  阅读原文»

3. ArchiMate的视角与视图

创建、维护一个企业架构是一件非常复杂繁琐的事情,因为这项工作需要面对许多背景、利益各异的干系人,对他们所关注的问题进行解答,并能够在他们之间形成无障碍的沟通流。为了简化这个问题的复杂度,各种企业架构框架从各个方面对企业架构的建设提供了帮助和指导。虽然这些架构框架就其具体内容来讲差异性较大,但是无论哪一种框架对于企业架构的内容却都有着自己的一套定义和分类方法,不过也正是这些分类明确、条理清晰的分类方法却使得各种企业架构框架对于各领域内容的描述缺失了他们之间的关联,因而不同领域之间的内容很难保持一致性。

不仅仅创建、维护企业架构是个复杂的问题,对于企业架构的使用也是一个非常繁琐的事情。即便我们已经创建了一个全面的企业架构,并在之后的维护中保持了良好的一致性,但是面对这样一个包罗万象的企业架构,每个干系人又如何获得其想要的信息呢?举例来说,企业的总经理需要的是组织中各个领域的概括,但并不关注于每个领域的细节,而对于基层的设计师来讲,其所关注的却是某个领域的细节。从目标和详细度这两个维度来看,没有干系人会关注所有领域的所有细节,每个干系人关心的只是和自己的利益相关的企业架构的一个侧面。因而如何从一个面面俱到的企业架构模型(描述)中根据干系人的关注点来获取相应的侧面信息也是一个亟需解决的重要问题。

综上所述,不论是创建、维护企业架构,还是对其进行使用,都需要面对一个架构内容一致性的问题。之所以会有这个问题,究其根本是因为企业架构本身是对企业这一包罗万象的客观事物的抽象和描述,而对其进行创建、维护和使用的干系人由于其本身的背景、利益不同,他们对企业架构描述的操作也只能着眼于某一个侧面。由此可见,企业架构描述与干系人的创建、维护和使用操作之间需要一个“接口”,用来规范干系人对于企业架构描述的各种操作,从而保证针对企业架构描述的修改和信息共享的一致性。

此“接口”就是前面提到过的视图(View)和视角(Viewpoint)。其中,视图通常被定义为面向各干系人关注点的企业架构描述的一个部分,而视角则是对视图内容的抽象和描述,他定义了视图中所使用的概念元素、分析方法和展示方式。一言以蔽之,视图定义了所看到的内容,而视角则定义了所采用的观察角度。

为了帮助架构师选择适合的视角和视图来对各个干系人进行辅助,ArchiMate定义了一个通用的视图和视角框架,对各种常用的视角和视图进行了归纳。这一框架从目标和内容两个维度对视图和视角进行了分类归纳:

  • 目标维度包括如下三个层面:
    • 设计(Designing):用于在从初始蓝图到详细设计这整个设计流程中对架构师和设计师进行支持。通常来讲,设计视角下的视图包括了诸如采用UML构建的类图、时序图等图形。
    • 决策(Deciding):通过提供多个领域的架构以及他们之间的跨领域关系来辅助管理者进行决策的视角。此视角所包含的视图通常来源于各种推断、交叉引用或分析方法,例如交叉引用表、情景图等报表。
    • 告知(Informing):用于为各个干系人对企业架构内容进行告知,从而获取不同干系人对于企业架构的理解、承诺,并对各持不同意见者进行说服。此视角所包含的视图包括各种图表、插图、动画等。
  • 内容维度包括如下三个层面:
    • 详细(Details):处在这一层次的视图通常着眼于企业架构中某一领域或方面的细节内容。
    • 相干(Coherence):处在这一层次的视图内容包含了企业架构中的多个领域或方面,并着重展示了这些领域之间的关系。
    • 概览(Overview):处在这一层次的视图内容同样也包含了企业架构中的多个领域或方面,不过其抽象层次要高于“相干”这一级别,从而能为组织高层的决策提供全面的信息,而又不会被过分的细节所掣肘。

以上述两个维度为基准,ArchiMate通过下图展示了其所定义的视角和视图框架。在图中我们可以看到:图的上半部分展示了目标维度的三个层次,而下半部分则描述了内容维度的三个层次,两者相互交合、共同体现了ArchiMate对于视图和视角的分类归纳。此外,此图周边还标注了各视图和视角对应的干系人实例。

image

需要注意的是,我们不能把上面针对视角和视图的分类当作是一种互斥的归纳方式。严格地讲,我们所采用的两个分类维度并不是分类基准,而应该是描述角度,举例来说,一个视角并不能因为是被用来进行“设计”而就不能用来对其他干系人进行“告知”。实际上,ArchiMate中所定义的各个标准视角往往横跨两个维度之中的多个分类层次。接下来,我们将进一步了解ArchiMate的制定者们根据其经验所定义的一系列标准视角。

3.1 介绍视角(Introductory Viewpoint)

介绍视角用在设计工作的初期阶段,其所采用的概念元素和关系是ArchiMate语言中各概念元素和关系的简化版本。此视角中的概念元素大多采用边框略粗的圆角矩形或其他直观但不正式的方式来进行表示,而除了触发关系和实现关系采用具有箭头的连线表示之外,各种关系图符都通过简单的线段连线来表示。因而,从表面上看,该视角下的各种视图都是通过一种非正式的方式来进行展示的,而之所以这样是因为在设计开始阶段一切事物的细节还未被发掘,此时的建模重点在于记录直观意图,采用这样一种方式更符合实际情况。此外,采用这样一种非正式的方式会让干系人直观地感觉到一切还处在开始阶段,还并未定型,从而不会产生出伴随正规的描述方式而来的无可动摇的距离感。

此视角所采用的各概念元素、关系,以及展示风格如下图所示:

image

此视角的示例视图如下图所示:

image

3.2 组织视角(Organization Viewpoint)

组织视角关注于某一组织实体的内部结构。组织视角的视图可以通过相互嵌套的块状图形来展示,也可以通过诸如组织结构图这样的传统方式来进行表述。

此视角所采用的各概念元素和关系如下图所示:

image

此视角的示例视图如下图所示:

image

3.3 参与者合作视角(Actor Co-operation Viewpoint)

参与者合作视角关注于各业务参与者与外部环境之间的关系。此视角一个常见的例子就是背景图(Context diagram),他描述了组织与包括客户、供应商和其他业务伙伴在内的外部环境之间的关系。此视角在明确组织的外部依赖和合作关系,展示其价值链这些方面都非常有用。除此之外,该视角还可以被用来展示各业务参与者和/或各应用组件是如何通过相互结合来实现各个业务流程。

此视角所采用的各概念元素和关系如下图所示:

image

此视角的示例视图如下图所示:

image

3.4 业务功能视角(Business Function Viewpoint)

业务功能视角用以表述企业的各项业务功能,以及他们之间消息、价值或货物的交递关系。通过描述企业所进行的各项主要活动,业务功能视角下的各个视图展示了企业的最稳定的一个方面,而不论组织如何变更、技术如何演进,所以对于在同一市场中的各个企业来说他们在此视角之下都是非常相似的。此外,由于此视角在高抽象层次对企业的日常运行进行了描述,因而企业可以据此明确自身必须的能力,并构建适合的组织结构。

此视角所采用的各概念元素和关系如下图所示:

image

Jquery和雅虎的YQL服务实现天气预报功能! - 软件人生  阅读原文»

很多外部网站都有天气预报功能,对于很多企业内部的门户也需要有天气预报功能,但实现天气预报的功能和方式确有所差异,本文介绍一个利用Jquery和雅虎的YQL服务实现天气预报功能,不涉及任何后端开发代码(如.Net,JAVA等),并在本人之前开发的移动OA网站上使用。目前最权威的天气预报数据是中国天气网(http://www.weather.com.cn/),因为这个是官方提供的气象数据,除了商业的增值服务外,还提供了免费的以JSON数据格式返回的气象数据,以查看杭州的天气数据为例,可以输入以下地址:http://m.weather.com.cn/data/101210101.html ,返回的JSON数据格式如下图:

YQL服务可以实现对网上不同数据源的query,filter,combine(查询,过滤,合并),提供类似SQL,具体地址如下:http://developer.yahoo.com/yql/console/ 。当实施查询的时候,YQL服务就会访问网络上的数据源,传输数据,返回XML或者JSON形式的数据结果。YQL可以使用许多类型的数据源,包括Yahoo!Web services 或者其他的网络服务,和网络数据类型例如:HTML, XML, RSS,和Atom。

因此可以通过两者的结合使用,完成天气预报功能的开发,具体JS代码如下:

function getWeather() {

$.getJSON(
"http://query.yahooapis.com/v1/public/yql", {
q:
"select * from json where url=\"http://m.weather.com.cn/data/101210101.html\"",
format:
"json"
},
function (data) {
if (data.query.results) {
//$("#content").text(JSON.stringify(data.query.results));
var J_data = JSON.parse(JSON.stringify(data.query.results));
//alert(J_data.weatherinfo.city);
$("#content").append("<p>"+J_data.weatherinfo.city+"天气预报(数据来源中国天气网)"+"</p>");
$(
"#content").append("<p>"+J_data.weatherinfo.date_y+" "+J_data.weatherinfo.week+" "+J_data.weatherinfo.temp1+" "+J_data.weatherinfo.weather1+" "+J_data.weatherinfo.wind1+" "+J_data.weatherinfo.index+" "+J_data.weatherinfo.index_d+"</p>");
var t= J_data.weatherinfo.date_y;
t
=t.replace("年","/");
t
=t.replace("月","/");
t
=t.replace("日","");

var tdy = new Date(t);

var t2 = new Date();


t2.setDate(tdy.getDate()
+1);



$(
"#content").append("<p>"+ t2.Format("yyyy年MM月dd日")+" "+getweekdays(t2)+" "+J_data.weatherinfo.temp2+" "+J_data.weatherinfo.weather2+" "+J_data.weatherinfo.wind2+"</p>");

var t3 = new Date();

t3.setDate(tdy.getDate()
+2);
$(
"#content").append("<p>"+t3.Format("yyyy年MM月dd日")+" "+getweekdays(t3)+" "+J_data.weatherinfo.temp3+" "+J_data.weatherinfo.weather3+" "+J_data.weatherinfo.wind3+"</p>");

var t4 = new Date();

t4.setDate(tdy.getDate()
+3);
$(
"#content").append("<p>"+t4.Format("yyyy年MM月dd日")+" "+getweekdays(t4)+" "+J_data.weatherinfo.temp4+" "+J_data.weatherinfo.weather4+" "+J_data.weatherinfo.wind4+"</p>");

var t5 = new Date();

t5.setDate(tdy.getDate()
+4);
$(
"#content").append("<p>"+t5.Format("yyyy年MM月dd日")+" "+getweekdays(t5)+" "+J_data.weatherinfo.temp5+" "+J_data.weatherinfo.weather5+" "+J_data.weatherinfo.wind5+"</p>");

var t6 = new Date();

t6.setDate(tdy.getDate()
+5);
$(
"#content").append("<p>"+t6.Format("yyyy年MM月dd日")+" "+getweekdays(t6)+" "+J_data.weatherinfo.temp6+" "+J_data.weatherinfo.weather6+" "+J_data.weatherinfo.wind6+"</p>");



//alert(getweekdays(t2));

}
else {
$(
"#content").text('no such code: ' + code);
}
});

//$.getJSON("http://m.weather.com.cn/data/101210101.html", null, function(json) { alert(json); });

}

function getweekdays(datey)
{
if(datey.getDay()==0)
{
return "星期日";
}
else if(datey.getDay()==1)
{
return "星期一";
}
else if(datey.getDay()==2)
{
return "星期二";
}
else if(datey.getDay()==3)
{
return "星期三";
}
else if(datey.getDay()==4)
{
return "星期四";
}
else if(datey.getDay()==5)
{

阅读更多内容

没有评论:

发表评论