“多团队大规模”开发模式 - 基于SAP HANA平台的多团队产品研发

应用SAP HANA “官方”开发模式的伙伴们在转到“多团队大规模”开发模式时会遇到各式各样的心理不适应的状况,各种纠结。比如GIT Repository和HANA Repository冲突什么的。

这些问题主要是思路没有完全转换过来,两种开发模式在不断的“打架”。做一个简单的开发模式映射这样大家或许比较容易去接受“多团队大规模”的开发模式。这个映射不一定完全正确,主要是帮助大家理解。

伙伴们想一想平常我们做JAVA或者.NET项目是怎么做的?一般情况是使用各种框架写JAVA/.NET的代码,然后用ORM映射数据库。写SQL Query时基本上都是在SQL里面去写,去测试然后拼接到自己的JAVA/.NET代码中。

 

那么我们在SAP HANA平台上开发同样可以学习这样的模式,当然这种模式可能比“官方”模式厚重点,但是好处也是显而易见的,比如前文提到的那些好处。前后端的开发都可以在Eclipse中,HANA Studio的作用完全等同拼写检查SQL Query等SQL层面的工作。这样我们在开发过程中就可以应用很多手段,方便的传递参数。比如替换rootpackage,通过maven的插件就很容易的可以做到。这样HANA Instance就扮演了一个编译器的作用。前端的代码编译好之后,和后端代码整合到一起Activate到HANA Repository中,这时的Activate就像是compile一样。Maven的插件,或者Ant的脚本把Activate这些HANA特有的动作都封装起来,开发人员完全还是遵循着传统多团队大规模开发的模式——写代码,编译,调试等。

 

由于Maven涉及到公司内部提供的插件,没有开源。所以就提供一个Ant的脚本以饷读者。

<project name="regi" basedir=".">
    <description>Regi wrapper</description>

     <!-- Properties for using REGI -->
    <property name="userstore.key" value="BUILD"/>
    <property name="userstore.cmdline" value="${client.dir}/hdbuserstore"/>
    <property name="regi.cmdline" value="${client.dir}/regi"/>
    <property name="regi.connection.args" value="--key=BUILD" />

    <macrodef name="regi">
        <attribute name="workspacedir" />
        <attribute name="command" />

        <sequential>
            <!-- make sure the directory exists -->
            <mkdir dir="@{workspacedir}" />

            <!-- Create the workspace -->
            <exec executable="${regi.cmdline}" dir="@{workspacedir}" failonerror="true">
              <arg line="@{command}" />
            </exec>
        </sequential>
    </macrodef>

    <macrodef name="regi_apply">
        <attribute name="workspacedir" />
        <attribute name="command" />
        <element name="files" />

        <sequential>
            <!-- make sure the directory exists -->
            <mkdir dir="@{workspacedir}" />

            <!-- Create the workspace -->
            <apply executable="${regi.cmdline}" dir="@{workspacedir}" failonerror="true" relative="true" parallel="true">
              <arg line="@{command}" />
              <files />
            </apply>
        </sequential>
    </macrodef>

    <macrodef name="regi_setupuserstore">
      <attribute name="workspacedir" />
      <sequential>
    <!-- Setup a key in the user store for use by REGI -->
    <exec executable="${userstore.cmdline}" dir="@{workspacedir}" failonerror="true">
      <arg line="SET ${userstore.key} ${hana.host} ${hana.user} ${hana.password}" />
      </exec>
    </sequential>
      </macrodef>

    <macrodef name="regi_createworkspace">
        <attribute name="workspacedir" />

        <sequential>
            <!-- make sure the directory exists (needed for keystore operation) -->
            <mkdir dir="@{workspacedir}" />

            <!-- Create the workspace -->
            <mkdir dir="@{workspacedir}" />
            <exec executable="${regi.cmdline}" dir="@{workspacedir}" failonerror="true">
              <arg line="${regi.connection.args} create workspace --force" />
            </exec>
        </sequential>
    </macrodef>

    <macrodef name="regi_export">
        <attribute name="workspacedir" />
        <attribute name="deliveryUnit" default="" />
        <attribute name="vendor" default="" />
        <attribute name="fileName" default="" />

        <sequential>
            <!-- Export the desired delivery unit to the specified file -->
            <regi workspacedir="@{workspacedir}" command="export @{deliveryUnit} @{vendor} @{fileName}" />
        </sequential>
    </macrodef>

    <macrodef name="regi_track">
        <attribute name="workspacedir" />
        <attribute name="package" default="" />

        <sequential>
            <echo>regi track @{package}</echo>

            <!-- Track the desired package -->
            <regi workspacedir="@{workspacedir}" command="track @{package}" />
        </sequential>
    </macrodef>

    <macrodef name="regi_commit">
        <attribute name="workspacedir" />

        <sequential>
            <regi workspacedir="@{workspacedir}" command="commit" />
            <regi workspacedir="@{workspacedir}" command="activate" />
        </sequential>
    </macrodef>

    <macrodef name="regi_import">
        <attribute name="workspacedir" />
        <attribute name="import" />

        <sequential>
            <regi workspacedir="@{workspacedir}" command="import @{import}" />
        </sequential>
    </macrodef>

    <macrodef name="regi_cleanpackage">
        <attribute name="package"/>

        <sequential>
            <echo message="Deleting regi package: @{package}" />

            <!-- Brutally crush any and all evidence of the repo objects for the passed package -->
            <hdbsqlsql failonerror="false" sql="
                delete from &quot;_SYS_REPO&quot;.&quot;ACTIVE_OBJECT&quot;   where PACKAGE_ID = ‘@{package}‘ OR PACKAGE_ID LIKE ‘@{package}.%‘ ${line.separator}
                delete from &quot;_SYS_REPO&quot;.&quot;OBJECT_HISTORY&quot;  where PACKAGE_ID = ‘@{package}‘ OR PACKAGE_ID LIKE ‘@{package}.%‘ ${line.separator}
                delete from &quot;_SYS_REPO&quot;.&quot;RUNTIME_OBJECTS&quot; where PACKAGE_ID = ‘@{package}‘ OR PACKAGE_ID LIKE ‘@{package}.%‘ ${line.separator}
                delete from &quot;_SYS_REPO&quot;.&quot;PACKAGE_CATALOG&quot; where PACKAGE_ID = ‘@{package}‘ OR PACKAGE_ID LIKE ‘@{package}.%‘ ${line.separator}
                delete from &quot;_SYS_REPO&quot;.&quot;INACTIVE_OBJECT&quot; where PACKAGE_ID = ‘@{package}‘ OR PACKAGE_ID LIKE ‘@{package}.%‘ ${line.separator}
                delete from &quot;_SYS_REPO&quot;.&quot;ACTIVE_OBJECTCROSSREF&quot; where FROM_PACKAGE_ID = ‘@{package}‘ OR FROM_PACKAGE_ID LIKE ‘@{package}.%‘ ${line.separator}
                delete from &quot;_SYS_REPO&quot;.&quot;ACTIVE_OBJECTCROSSREF&quot; where TO_PACKAGE_ID = ‘@{package}‘ OR TO_PACKAGE_ID LIKE ‘@{package}.%‘ ${line.separator}
                delete from &quot;_SYS_REPO&quot;.&quot;INACTIVE_OBJECTCROSSREF&quot; where FROM_PACKAGE_ID = ‘@{package}‘ OR FROM_PACKAGE_ID LIKE ‘@{package}.%‘ ${line.separator}
                delete from &quot;_SYS_REPO&quot;.&quot;INACTIVE_OBJECTCROSSREF&quot; where TO_PACKAGE_ID = ‘@{package}‘ OR TO_PACKAGE_ID LIKE ‘@{package}.%‘ ${line.separator}
            "/>
        </sequential>
    </macrodef>

    <macrodef name="regi_clean">
        <attribute name="workspacedir" />

        <sequential>
            <delete dir="@{workspacedir}/._SYS_REGI_settings"/>
        </sequential>
    </macrodef>

    <macrodef name="regi_checkout_trackedPackages">
        <attribute name="workspacedir" />

        <sequential>
            <echo>regi checkout trackedPackages --force</echo>
            <echo>[email protected]{workspacedir}</echo>

            <!-- Checkout all packages that have been tracked. -->
            <regi workspacedir="@{workspacedir}" command="checkout trackedPackages --force" />
        </sequential>
    </macrodef>

    <macrodef name="regi_delete_packages">
        <attribute name="workspacedir" />
        <attribute name="packages" />

        <sequential>
            <echo>regi delete packages @{packages}</echo>
            <echo>[email protected]{workspacedir}</echo>

            <!-- Delete the desired package -->
            <regi workspacedir="@{workspacedir}" command="delete packages @{packages}" />
        </sequential>
    </macrodef>

</project>
时间: 2024-10-01 02:47:49

“多团队大规模”开发模式 - 基于SAP HANA平台的多团队产品研发的相关文章

SAP HANA 开发模式 - 基于SAP HANA平台的多团队产品研发

“基本”开发模式 Windows: Unix/Linux: 在基本模式下我们可以通过regi来进行激活我们的object.Regi是一个类git功能的,方便和HANA repository交互的一个命令行工具. 具体步骤如下: 创建一个HANA的user key:hdbuserstore SET <key> <hana server>:<port>  <UserName> <Password> 创建 xs的workspaceregi create

SAP HANA开发中常见问题- 基于SAP HANA平台的多团队产品研发

大家都知道SAP HANA项目打包成Delivery Unit(缩写为DU).依照"官方"的开发模式,特别是整个团队仅仅使用一个HANA Instance进行项目开发,因为HANA本身还在不断成长中,会遇到各种奇葩问题导致打包出来的DU在新环境中import 失败.那些失败Error Message trace,对于开发人员基本上没什么帮助. 并且在项目开发过程中,总会有些队友会不按常理出牌,终于导致项目DU无法使用,特别是在測试资源匮乏的情况下,非常多问题不能及时暴露.当你看到满屏幕

基于SAP HANA平台的多团队产品研发

工欲善其事必先利其器.要提高多团队的开发效率,而且还是在SAP HANA平台上,建议大家还是本着“慢就是快”的原则,不要急功近利,在没有准备好团队开发的架构时就匆忙开始功能的开发.匆忙功能开发就算了,估计还存在没想清楚做什么,为什么要做上来就开发的团队,那是更要不得. 今天就和大家分享一下在SAP HANA上开发时的一些准备工作的方法. 方法一:基本无代码控制的手工作坊式的开发 利用SAP HANA自身带的HANA Repository, 所有的团队成员在同一个HANA Instance上开发.

团队软件开发_基于windows下截屏软件关于NABC框架的特点

经过我们小组数次的激烈讨论,就自己的能力和时间而言,我们小组的初步的计划是开发一款基于windows下的截图软件. 关于这个软件的功能,我们初步的想法如下: 1.能在windows下后台运行,有相应的快捷键,以便随时随地的截取用户所需要的信息: 2.在截屏开始钱前有一个关于形状的选择(如矩形,圆形等),当然,还有我们小组自认为比较好的随意形状的截图: 3.当随意形状截屏时,此软件还有磁性吸附轮廓的功能,以避免鼠标使用时截屏的轮廓不合理情况:

Meth | 小团队git开发模式

这种模式的开发流程如下: 1.由其中一个开发者这服务器上建立一个数据库. 所有开发者都可以向数据库提交和下载东西,这里必须规定一定的时间间隔(一周或者一天)必须提交一次,不然以后解决冲突时是个大问题. 如果每个人的开发耦合度很高,我们可在服务器上建立分支,然后每人每次提交到自己的分支上,过一段时间之后(不能太久)有一个人去合并分支.然后所有 人更新自己的数据库的master分支,使之跟服务器上的master分支同步.2.这样服务器会有非常多的版本信息,集合了每个人的版本信息.过了一段时间之后,例

SAP统一丰富的云产品组合以服务规模不同的企业—凭借SAP HANA云平台

SAP统一丰富的云产品组合以服务规模不同的企业-凭借SAP HANA云平台 借助 SAP 统一的云产品组合,客户可以: 基于 SAP HANA云平台,实时顺应业务变化 作为业界唯一一个基于 SAP HANA 的云平台,SAP 旨在协助客户在实时的情况下,快速洞察.分析及应对业务变化,并实现持续创新.SAP HANA云平台是所有 SAP 云产品组合的基础平台,涵盖了应用开发以及集成服务.数据服务和基础设施服务等功能.SAP HANA云平台也是近期发布的 SAP HANA企业云不可或缺的组成部分,可

云计算的一匹黑马——SAP HANA

云计算的一匹黑马--SAP HANA 现如今,正是风起云涌之时. 随着云计算的日新月异的发展,如何选择云计算服务已经成了企业决策者很关心的问题.如果选对了云计算,那么就有助于企业按需实现业务创新.提高业务灵活性,扩展现有基础架构,从而构建新流程,获得新洞察,快速调整业务流程,相应瞬息万变的全球化市场. 面对各种各样.令人眼花缭乱的云计算层出不穷,很多IT巨头都纷纷竞相角逐运市场.这对于企业而言是一件好事,为企业重新思考未来并推动前所未有的转型创造了契机. 在经济全球化的趋势之下,企业比以往更需要

【DevOps】团队敏捷开发系列--开山篇

随着软件发布迭代的频率越来越高,传统的「瀑布型」(开发-测试-发布)模式已经不能满足快速交付的需求.2009 年左右 DevOps 应运而生,开发运维一体化,通过自动化工具与流程让整个软件开发构建.测试.发布更加快捷.频繁.高效和可靠. 本系列教程目录 本系列将详细讲解Devops落地细节.将构建整个持续集成与交付的一整套体系与流程.对于未来要开篇的系列博文列表如下: [DevOps]团队敏捷开发系列(一)--开山篇 [DevOps]团队敏捷开发系列(二)--版本控制之道Git [DevOps]

In-memory Computing with SAP HANA读书笔记 - 第二章:SAP HANA overview

本文为In-memory Computing with SAP HANA on Lenovo X6 Systems第二章SAP HANA overview的读书笔记. 本章最重要的部分是SAP HANA architecture SAP HANA overview SAP HANA数据库是结合了行式,列式和对象的内存数据库,可以充分利用硬件的并行处理能力. SAP HANA appliance是一体化的软硬件设施,核心还是SAP HANA. SAP HANA architecture HANA的