递归的装配模型

递归的装配模型

       SCA协会从内外部提出的进一步简化SCA装配模型的建议需求中获取到了许多反馈意见。反馈中非常清楚地阐述了让SCA装配模型完全具有递归性将是进一步简化的关键所在。

       递归性基本上意味着装配可以嵌入在其他“高层”装配的内部。装配模型的完整递归性将有助于提升装配的复用性。它也在自顶向下的解决方案设计中支持服务实现的后续分解。

       SCA v0.9装配规范中,(module)模块包含在一系列由“原子”组件实现的组件之间。对于由其他装配集实现的组件,在(module)模块装配级别上没有提供支持。

       从系统装配级来看,V0.9规范包含由模块实现的组件,但仅仅是用模块组件来命名这些组件。对于在模块装配级别,它们还不存在可扩展的实现类型这个概念。

       所以,在SCA 1.0装配规范中,三项工作简化了模型:

1.  只包含不依赖于任何装配层次级别的组件

2.  组件既可以由简单的实现也可以由装配集来实现

3.  不用术语”module””system”来命名装配集,而用composite

       允许组件可以由简单的实现或构件来实现为更进一步的简化提供了支持。原子实现和构件应该使用相同的技术,并提供相同的可配置方面(比如:服务,引用和属性)的定义方式。可以通过重命名entry pointv0.9规范中的定义)为servicev1.00规范中的定义),external servicev0.9规范中的定义)为referencev1.00规范中的定义),并允许为构件定义属性。

       v0.9规范中,module装配和system装配集有构建一系列局部装配集的外部装配的概念。在模块级有称为module的片段,系统级有称为subsystem的片段。在最新的模型中,这个都认为是构件使用的另一种形式。通过将包含构件到另外的构件中来使用它,就意味着构件内容的文本信息包含进含有该构件的构件中。以这种方式用于内含其他构件的构件不一定需要实现他们可以容纳任意元素集,该元素集完成该含有它们的构件所需的工作。

 

模型变化小结

       以下表格通过对比新老模型总结了模型的变化信息。可以非常清晰地看到是如何通过减少概念的数目的方式来让具有递归性的装配模型简化模型的。

新模型实践

       在后面我们用Big Bank案例(在我翻译的BigBank案例中)的变种来演示新的装配模型。

开发装配集

       该案例的变种就是使用另一个构件替代POJO来实现bigbank.Account构件的AccountDataServiceComponent。下图展示了两个构件的装配图,bigbank.Accountbigbank.Accountdata构件。后者实现了前者的AccountDataServiceComponent

如下代码片段展示了bigbank.Account构件的定义。它定义了AccountDataServiceComponent,该组件的实现使用了bigbank.Accountdata构件。它还展示了如何为构件定义property,构件属性是如何设置的,这里在AccountServiceComponent上使用了属性。该案例还展示了构件中的entry point现在称为serviceexternal service现在称为reference。组件属性和引用都以XML方式配置的方式也可以剔除vvV0.9规范中的命名空间,会引发冲突)的使用简化使用。

       <composite      xmlns="http://www.osoa.org/xmlns/sca/1.0"

                  xmlns:bb="http://bigbank.com"

                  targetNamespace="http://bigbank.com"

                  name="bigbank.account">

 

       <service name="accountService" promote="AccountServiceComponent">

              <interface.java interface="services.account.AccountService"/>

              <binding.ws port="... #wsdl.endpoint(AccountService/AccountServiceSOAP)"/>

       </service>

 

       <property name="currency" type="xsd:string">USD</property>

 

       <component name="AccountServiceComponent">

              <implementation.java class="services.account.AccountServiceImpl" />

              <property name="currency" source="$currency"/>

              <reference name="accountDataService" target="AccountDataServiceComponent"/>

              <reference name="stockQuoteService" target="StockQuoteService"/>

       </component>

 

       <component name="AccountDataServiceComponent">

              <implementation.composite name="bb:bigbank.AccountData"/>

       </component>

 

       <reference name="StockQuoteService"

                promote="AccountServiceComponent/stockQuoteService">

              <interface.java interface="services.stockquote.StockQuoteService"/>

              <binding.ws port="...#wsdl.endpoint(StockQuoteService/StockQuoteServiceSOAP)"/>

       </reference>

 

</composite>

如下给出了bigbank.AccountData构件的定义

       <composite    xmlns="http://www.osoa.org/xmlns/sca/1.0"

                targetNamespace="http://bigbank.com"

                            name="bigbank.AccountData">

 

       <service name="accountdataService" promote="AccountData">

              <interface.java interface="services.accountdata.AccountDataService"/>

       </service>

 

       <component name="AccountData">

              <implementation.java class="services.accountdata.AccountDataImpl"/>

       </component>

 

</composite>

 

部署装配集

       下面的装配图给出了SCA域中的bigbank.account构件的配置。我们经过创建另一个构件配置了一个实现(在我们例子中是bigbank.Account构件)到SCA域中。创建的构件通过包含方式添加到域中。域自身就如构件一样工作,并且其配置通过对其他构件的包含来设置。

       注:许多情况下,组件配合完整的配置信息使得他们在SCA域中是已经可以使用的组件。SCA提供了为这些实现的部署提供了直接的方式。

以下代码片段给出了bigbank.AccountManagement构件的定义,该构件创建了前面提到的bigbank.Account构件的配置化了的实例。它演示了当前属性是如何设置的,也展示了stock quote web serviceendpoint地址是如何被覆盖的:

       <composite     xmlns="http://www.osoa.org/xmlns/sca/1.0"

                xmlns:bb="http://bigbank.com"

                targetNamespace="http://bigbank.com"

                 name="bigbank.AccountManagement">

 

       <component name="bigbank.Account">

              <implementation.composite name="bb:bigbank.Account" />

              <property name="currency">EURO</property>

              <reference name="stockQuoteService">

                     http://www.eurosq.com/SQService

              </reference>

       </component>

</composite>

       下列代码片段展示了bigbank.Client构件的定义。该构件创建了bigbank.Webclient构件的配置化实例。Bigbank.Webclient构件的详细信息请查看我翻译的BigBank案例。Bigbank.Webclient构件的accountService引用被连线到bigbank.Account构件的accountService上。

       <composite     xmlns="http://www.osoa.org/xmlns/sca/1.0"

                xmlns:bb="http://bigbank.com"

                targetNamespace="http://bigbank.com"

                 name="bigbank.Client">

 

       <component name="bigbank.Webclient">

              <implementation.composite name="bb:bigbank.Webclient" />

              <reference name="accountService" target="bigbank.account/accountService"/>

       </component>

 

</composite>

 

 
在使用Python来安装geopandas包时,由于geopandas依赖于几个其他的Python库(如GDAL, Fiona, Pyproj, Shapely等),因此安装过程可能需要一些额外的步骤。以下是一个基本的安装指南,适用于大多数用户: 使用pip安装 确保Python和pip已安装: 首先,确保你的计算机上已安装了Python和pip。pip是Python的包管理工具,用于安装和管理Python包。 安装依赖库: 由于geopandas依赖于GDAL, Fiona, Pyproj, Shapely等库,你可能需要先安装这些库。通常,你可以通过pip直接安装这些库,但有时候可能需要从其他源下载预编译的二进制包(wheel文件),特别是GDAL和Fiona,因为它们可能包含一些系统级的依赖。 bash pip install GDAL Fiona Pyproj Shapely 注意:在某些系统上,直接使用pip安装GDAL和Fiona可能会遇到问题,因为它们需要编译一些C/C++代码。如果遇到问题,你可以考虑使用conda(一个Python包、依赖和环境管理器)来安装这些库,或者从Unofficial Windows Binaries for Python Extension Packages这样的网站下载预编译的wheel文件。 安装geopandas: 在安装了所有依赖库之后,你可以使用pip来安装geopandas。 bash pip install geopandas 使用conda安装 如果你正在使用conda作为你的Python包管理器,那么安装geopandas和它的依赖可能会更简单一些。 创建一个新的conda环境(可选,但推荐): bash conda create -n geoenv python=3.x anaconda conda activate geoenv 其中3.x是你希望使用的Python版本。 安装geopandas: 使用conda-forge频道来安装geopandas,因为它提供了许多地理空间相关的包。 bash conda install -c conda-forge geopandas 这条命令会自动安装geopandas及其所有依赖。 注意事项 如果你在安装过程中遇到任何问题,比如编译错误或依赖问题,请检查你的Python版本和pip/conda的版本是否是最新的,或者尝试在不同的环境中安装。 某些库(如GDAL)可能需要额外的系统级依赖,如地理空间库(如PROJ和GEOS)。这些依赖可能需要单独安装,具体取决于你的操作系统。 如果你在Windows上遇到问题,并且pip安装失败,尝试从Unofficial Windows Binaries for Python Extension Packages网站下载相应的wheel文件,并使用pip进行安装。 脚本示例 虽然你的问题主要是关于如何安装geopandas,但如果你想要一个Python脚本来重命名文件夹下的文件,在原始名字前面加上字符串"geopandas",以下是一个简单的示例: python import os # 指定文件夹路径 folder_path = 'path/to/your/folder' # 遍历文件夹中的文件 for filename in os.listdir(folder_path): # 构造原始文件路径 old_file_path = os.path.join(folder_path, filename) # 构造新文件名 new_filename = 'geopandas_' + filename # 构造新文件路径 new_file_path = os.path.join(folder_path, new_filename) # 重命名文件 os.rename(old_file_path, new_file_path) print(f'Renamed "{filename}" to "{new_filename}"') 请确保将'path/to/your/folder'替换为你想要重命名文件的实际文件夹路径。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值