亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于MVC+MSSQL+EF的軟件平臺(tái)接口管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

        2017-11-01 17:14:42張遠(yuǎn)濤
        關(guān)鍵詞:視圖代碼數(shù)據(jù)庫(kù)

        周 敏 王 勇 張遠(yuǎn)濤 趙 云

        (上海中興軟件有限責(zé)任公司RRU軟件部 上海 201203)

        基于MVC+MSSQL+EF的軟件平臺(tái)接口管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

        周 敏 王 勇 張遠(yuǎn)濤 趙 云

        (上海中興軟件有限責(zé)任公司RRU軟件部 上海 201203)

        當(dāng)前在不少軟件平臺(tái)系統(tǒng)的開(kāi)發(fā)中,開(kāi)發(fā)、調(diào)試、測(cè)試和交付都是以接口為基礎(chǔ)進(jìn)行交互,同時(shí)以接口為單位劃分責(zé)任人、代碼審查、考核員工績(jī)效,因此接口數(shù)據(jù)的統(tǒng)計(jì)、呈現(xiàn)和管理尤為重要。大多企業(yè)的軟件平臺(tái)接口管理的現(xiàn)狀:不同平臺(tái)、版本和部門接口數(shù)據(jù)不能及時(shí)同步因而數(shù)據(jù)不完整,接口設(shè)計(jì)、實(shí)現(xiàn)、審查、測(cè)試和交付比較獨(dú)立因而數(shù)據(jù)不一致、不可靠,多個(gè)系統(tǒng)接口數(shù)據(jù)零散且前臺(tái)不可配置,因而后期統(tǒng)計(jì)整理和維護(hù)量大。針對(duì)這一需求和現(xiàn)狀,基于MVC+MSSQL+EF架構(gòu)采用敏捷開(kāi)發(fā)方式,結(jié)合SVN、Phabricator、Robocopy和Jenkins機(jī)制跟蹤審查代碼、自動(dòng)同步數(shù)據(jù)和實(shí)時(shí)發(fā)布新版本。本文對(duì)系統(tǒng)的整體框架、實(shí)體類模型設(shè)計(jì)、可動(dòng)態(tài)配置的前臺(tái)、MVC+MSSQL+EF架構(gòu)在系統(tǒng)中的應(yīng)用和關(guān)鍵技術(shù)進(jìn)行重點(diǎn)描述。本系統(tǒng)目前已應(yīng)用于上海某通信公司RRU、BBU等部門,實(shí)際應(yīng)用證明本系統(tǒng)具有跨部門、跨平臺(tái)、可配置、高效、安全和可靠的特點(diǎn)。

        接口 MVC EF 配置 敏捷開(kāi)發(fā) Jenkins

        0 引 言

        隨著軟件平臺(tái)、設(shè)計(jì)模式和開(kāi)發(fā)方式等技術(shù)的高速發(fā)展,不少企業(yè)和科研機(jī)構(gòu)都有自己的軟件開(kāi)發(fā)平臺(tái),基于軟件平臺(tái)中多模塊多層軟件的具體實(shí)現(xiàn)主要是以接口的方式來(lái)交互,接口數(shù)據(jù)對(duì)軟件平臺(tái)中的軟件開(kāi)發(fā)具有重要意義。因此不少大企業(yè)都有自己的軟件平臺(tái)接口管理系統(tǒng),借以來(lái)劃分責(zé)任人、統(tǒng)計(jì)工作量、代碼審查與優(yōu)化、實(shí)現(xiàn)對(duì)外交付和業(yè)績(jī)考核等。

        然而目前大多相關(guān)系統(tǒng)在開(kāi)發(fā)和維護(hù)中的現(xiàn)狀:不同平臺(tái)、版本和部門數(shù)據(jù)不能及時(shí)同步,因此數(shù)據(jù)不完整;多個(gè)系統(tǒng)接口數(shù)據(jù)零散且前臺(tái)不可配置,因而后期統(tǒng)計(jì)整理和維護(hù)量大,尤其在規(guī)格接口、開(kāi)發(fā)團(tuán)隊(duì)、部門合并和新增時(shí);各個(gè)部門和開(kāi)發(fā)流程中接口數(shù)據(jù)不能及時(shí)同步,因而數(shù)據(jù)準(zhǔn)確性低。同時(shí)需求變更頻繁,團(tuán)隊(duì)開(kāi)發(fā)和交付效率低、版本交付延遲。

        本文鑒于開(kāi)發(fā)中實(shí)際需求的不確定性和多次變更等特點(diǎn),采用敏捷開(kāi)發(fā)[1]、測(cè)試驅(qū)動(dòng)開(kāi)發(fā)的方式,多次迭代,同時(shí)采用代碼優(yōu)先(Code First)的開(kāi)發(fā)方式,減少對(duì)數(shù)據(jù)庫(kù)的依賴,并考慮開(kāi)發(fā)平臺(tái)的結(jié)合性和兼容性。數(shù)據(jù)庫(kù)采用MSSQL,采用基于MVC+MSSQL +EF的架構(gòu)開(kāi)發(fā),借助Jenkins機(jī)制實(shí)時(shí)同步外部系統(tǒng)數(shù)據(jù)和發(fā)布新版本,采用反射的機(jī)制呈現(xiàn)前臺(tái)動(dòng)態(tài)和靜態(tài)數(shù)據(jù),基于JSON[3]的Ajax更新前臺(tái)呈現(xiàn)方式。

        相比傳統(tǒng)意義上的Web開(kāi)發(fā)框架,本框架開(kāi)發(fā)過(guò)程中對(duì)數(shù)據(jù)庫(kù)依賴性低,更好地滿足測(cè)試驅(qū)動(dòng)開(kāi)發(fā)的敏捷開(kāi)發(fā)模式[2],減少迭代的周期,利于團(tuán)隊(duì)分模塊開(kāi)發(fā)和后期維護(hù)拓展。

        1 系統(tǒng)設(shè)計(jì)

        1.1 系統(tǒng)框架

        本軟件平臺(tái)接口管理系統(tǒng)應(yīng)用MVC+MSSQL+EF框架完成開(kāi)發(fā),其基本結(jié)構(gòu)如圖1所示。

        圖1 軟件平臺(tái)接口管理系統(tǒng)框架

        用戶通過(guò)瀏覽器發(fā)送請(qǐng)求給對(duì)應(yīng)的Controller,Controller根據(jù)具體業(yè)務(wù)邏輯判斷是否需要通過(guò)Model并處理,返回給View呈現(xiàn)給用戶(UI)。由圖1可見(jiàn)MVC框架中三個(gè)基本元素與Web三層結(jié)構(gòu)的對(duì)應(yīng)關(guān)系,本文相比文獻(xiàn)[3]進(jìn)一步細(xì)化了數(shù)據(jù)庫(kù)訪問(wèn)層(DAL),數(shù)據(jù)訪問(wèn)采用數(shù)據(jù)庫(kù)訪問(wèn)上下文(DbContext)、實(shí)體類(Entity)和相關(guān)組建(EF)。它不僅完成了業(yè)務(wù)邏輯層(BLL)和數(shù)據(jù)庫(kù)(MSSQL)中數(shù)據(jù)的交互,同時(shí)在代碼優(yōu)先的開(kāi)發(fā)方式中,通過(guò)實(shí)體類的維護(hù)自動(dòng)映射出數(shù)據(jù)庫(kù)中表以及其表間關(guān)系的更新,符合敏捷開(kāi)發(fā)的要求[3]。

        1.2 功能模塊

        根據(jù)實(shí)際需要,本軟件平臺(tái)接口管理系統(tǒng)主要分為8大模塊,各個(gè)模塊有相應(yīng)子模塊,如圖2所示。

        圖2 軟件平臺(tái)接口管理功能模塊

        下面對(duì)各個(gè)模塊的功能簡(jiǎn)要說(shuō)明:

        (1) User模塊:通過(guò)登錄實(shí)現(xiàn)對(duì)用戶的角色認(rèn)證。系統(tǒng)將根據(jù)用戶的角色,對(duì)管理系統(tǒng)其他模塊的訪問(wèn)進(jìn)行控制,具體加密由Authority模塊組合控制,并提供個(gè)性化的操作和服務(wù)。

        (2) Authority Manager模塊:對(duì)公司所有用戶進(jìn)行認(rèn)證、角色管理和加密管理,以及對(duì)其他模塊需要的權(quán)限控制和加密控制,比如Scorecard等,同時(shí)滿足以后系統(tǒng)拓展的需求。

        (3) Interface模塊:這是公司的核心模塊,公司各軟件平臺(tái)、規(guī)格、版本的接口相關(guān)的數(shù)據(jù)都詳細(xì)統(tǒng)計(jì)在該模塊中。該模塊的主頁(yè)面可以完全后臺(tái)配置,并滿足各部門和外場(chǎng)查詢以及責(zé)任定位的需求。同時(shí)平臺(tái)架構(gòu)和接口設(shè)計(jì)者可根據(jù)接口的具體規(guī)格、版本、模塊以及實(shí)現(xiàn)語(yǔ)言直接生成對(duì)應(yīng)的部分平臺(tái)代碼,供接口實(shí)現(xiàn)者按照業(yè)務(wù)需求具體實(shí)現(xiàn)。

        (4) Task模塊:關(guān)于公司接口實(shí)現(xiàn)情況的統(tǒng)計(jì),按照公司的各種統(tǒng)計(jì)方法,按照日、周、月以圖表的方式動(dòng)態(tài)呈現(xiàn)。

        (5) Scorecard模塊:系統(tǒng)的重要統(tǒng)計(jì)模塊,該模塊結(jié)合現(xiàn)有的多個(gè)外部系統(tǒng)。各個(gè)部門、開(kāi)發(fā)團(tuán)隊(duì)以及個(gè)人的接口實(shí)現(xiàn)、測(cè)試反饋、故障消除工作量的詳細(xì)信息統(tǒng)計(jì)。該模塊的前臺(tái)呈現(xiàn)可后臺(tái)配置,采用反射的方式,將靜態(tài)(比如年、季、月目標(biāo))和動(dòng)態(tài)(實(shí)際開(kāi)發(fā)進(jìn)展)的數(shù)據(jù)呈現(xiàn)出來(lái),并對(duì)每一具體的數(shù)值都以表格詳細(xì)統(tǒng)計(jì)出來(lái),每一組數(shù)值都以圖表形式直觀展現(xiàn)。

        (6) Phabricator模塊:該模塊用來(lái)處理具體接口實(shí)現(xiàn)過(guò)程中代碼審查和故障定位等細(xì)節(jié)性工作量數(shù)據(jù)。同時(shí)Phabricator模塊、Interface模塊和Coverity結(jié)合,快速定位代碼缺陷和確定告警信息消除責(zé)任者。

        (7) Test Center模塊:公司的測(cè)試模塊,該模塊提供現(xiàn)有接口的測(cè)試用例說(shuō)明,并對(duì)每個(gè)接口生成測(cè)試腳本,有測(cè)試人員測(cè)試并保存統(tǒng)計(jì)測(cè)試結(jié)果。

        (8) Jenkins Mange模塊:包含對(duì)系統(tǒng)實(shí)時(shí)同步外部系統(tǒng)的數(shù)據(jù)(包含接口數(shù)據(jù)、測(cè)試數(shù)據(jù)等)和實(shí)時(shí)發(fā)布當(dāng)前最新版本。

        1.3 實(shí)體類模型設(shè)計(jì)

        本文對(duì)Interface、Scorecard模塊中實(shí)體類部分的設(shè)計(jì)作詳細(xì)描述,完全可配置的Interface前臺(tái),其余模塊的實(shí)體類設(shè)計(jì)這里不予介紹。Interface、Scorecard模塊實(shí)體類設(shè)計(jì)如圖3所示。

        圖3 Interface/Scorecard模塊實(shí)體類設(shè)計(jì)

        本系統(tǒng)中Interface/Scorecard模塊最基本的11個(gè)實(shí)體類由圖3可見(jiàn),由此實(shí)體類通過(guò)EF映射成數(shù)據(jù)庫(kù)中對(duì)應(yīng)的表。表內(nèi)關(guān)系可由實(shí)體類中屬性強(qiáng)制設(shè)定(比如FK)或者默認(rèn)約定的方式確定,表間關(guān)系由實(shí)體類中虛線以下的虛擬對(duì)象屬性關(guān)聯(lián)。由此可直接動(dòng)態(tài)映射生成數(shù)據(jù)庫(kù)中對(duì)應(yīng)11張Interface模塊相關(guān)表及其表間關(guān)系。在敏捷開(kāi)發(fā)中,可依據(jù)實(shí)際需求更新實(shí)體類映射生成數(shù)據(jù)庫(kù)中對(duì)應(yīng)表,大大減少對(duì)數(shù)據(jù)庫(kù)的依賴,加快敏捷開(kāi)發(fā)迭代的速度。

        映射生成數(shù)據(jù)庫(kù)的表中,Platform表保存具體在某一階段中某一部門或者規(guī)格的軟件平臺(tái)名稱。具體該平臺(tái)中的所有接口相關(guān)數(shù)據(jù)由InterfaceRecord表存儲(chǔ)和維護(hù)。具體規(guī)格信息和版本信息由Specification表和PVersion表存儲(chǔ)。某一具體的接口信息由InterfaceRecord表和InterfaceDetial表以及InterfaceParameter表維護(hù),其中InterfaceParameter類用來(lái)保存各種開(kāi)發(fā)語(yǔ)言的類型種類、分類等信息。

        Platform前臺(tái)可配置性主要由PlatformRecord表實(shí)現(xiàn),在該表中,ParaJson存儲(chǔ)該接口訪問(wèn)本接口中其他頁(yè)面(比如該接口設(shè)計(jì)者、實(shí)現(xiàn)者、代碼審查、測(cè)試結(jié)果等)以及參數(shù)的序列化值。DisplayOrder為該接口對(duì)應(yīng)分類(模塊、部門)在頁(yè)面中顯示的順序,其中內(nèi)容通過(guò)Modular表進(jìn)行控制,InnerOder為該接口在所屬分類中顯示的次序。AccessControl進(jìn)行訪問(wèn)權(quán)限、加密和認(rèn)證方式管理,同樣采用序列化的方式進(jìn)行存儲(chǔ)。

        1.4 反射機(jī)制和類圖

        C#反射(Reflection)機(jī)制是在ADO.NET運(yùn)行時(shí)獲取類型信息的方式,即通過(guò)類名在運(yùn)行創(chuàng)建相應(yīng)類的對(duì)象。因此,為實(shí)現(xiàn)前端數(shù)據(jù)的顯示內(nèi)容和方式是可配置的,只需對(duì)相應(yīng)記錄配置類名和修改相關(guān)參數(shù)即可[3]。

        本系統(tǒng)中Scorecard模塊涉及的數(shù)據(jù)比較多,主要分為靜態(tài)數(shù)據(jù)和動(dòng)態(tài)數(shù)據(jù),靜態(tài)數(shù)據(jù)主要是各部門目標(biāo)、外場(chǎng)故障率等內(nèi)容。本系統(tǒng)中的動(dòng)態(tài)數(shù)據(jù)主要涉及多個(gè)系統(tǒng)的接口數(shù)據(jù)、工作業(yè)務(wù)數(shù)據(jù)、測(cè)試記錄等動(dòng)態(tài)更新的內(nèi)容。

        對(duì)于動(dòng)態(tài)數(shù)據(jù)通過(guò)存儲(chǔ)過(guò)程從數(shù)據(jù)庫(kù)中獲取數(shù)據(jù),由相應(yīng)的類來(lái)實(shí)現(xiàn),對(duì)于靜態(tài)數(shù)據(jù)存儲(chǔ)在ScorecardStatic表中(見(jiàn)圖3)具體UML類圖設(shè)計(jì)如圖4所示。

        圖4 Scorecard模塊數(shù)據(jù)庫(kù)設(shè)計(jì)

        設(shè)計(jì)思路如下:定義接口IScorecard,有一個(gè)GetData行為用來(lái)獲取數(shù)據(jù)[3],并定義實(shí)現(xiàn)該接口的抽象類ScorecardItem。派生出處理動(dòng)態(tài)類數(shù)據(jù)的類DynamicScorecardItem和處理靜態(tài)類數(shù)據(jù)的類StaticScorecardItem,再進(jìn)一步派生。

        對(duì)于靜態(tài)數(shù)據(jù),數(shù)據(jù)從圖3中ScorecardStatic中獲取,對(duì)于動(dòng)態(tài)數(shù)據(jù)通過(guò)不同的類獲得,比如這里的PHA、Task、Test、Failure和Coverity類。這時(shí),參考圖3中ScorecardRecord表,即可將ClassType(UML類圖中的類名)和Parameters作為參數(shù),通過(guò)反射獲取Scorecard中所有數(shù)據(jù)。

        2 MVC+MSSQL+EF在本系統(tǒng)中的應(yīng)用

        2.1 EF介紹

        EF(Entity Framework)是微軟提供的數(shù)據(jù)訪問(wèn)組建[4],該框架使得開(kāi)發(fā)人員以面向?qū)ο蟮姆绞綄?duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行訪問(wèn),實(shí)現(xiàn)數(shù)據(jù)庫(kù)架構(gòu)和查詢對(duì)象的分離。在本系統(tǒng)中通過(guò)EF組建,將實(shí)體類數(shù)據(jù)模型映射成數(shù)據(jù)庫(kù)中的表及其關(guān)系。

        本系統(tǒng)采用Visual Studio 開(kāi)發(fā)工具平臺(tái),因此采用 MSSQL數(shù)據(jù)庫(kù)的兼容性較好,因而采用MVC+MSSQL+EF框架給實(shí)際開(kāi)發(fā)帶來(lái)不少的幫助,同時(shí)微軟不斷升級(jí)和優(yōu)化的MVC和EF框架,將大大提高后期本系統(tǒng)中的數(shù)據(jù)訪問(wèn)速度。

        2.2 敏捷開(kāi)發(fā)和基于MSSQL的Code First開(kāi)發(fā)模式

        在ADO.NET中Entity Framework框架中,提供了3種方式進(jìn)行數(shù)據(jù)建模和對(duì)象持久化操作[4]:Database First、Model First和Code First,每種方式主要對(duì)應(yīng)一種開(kāi)發(fā)場(chǎng)景(編程模式)。在ASP.NET的開(kāi)發(fā)模式中,Database First開(kāi)發(fā)模式是基于數(shù)據(jù)庫(kù)系統(tǒng)開(kāi)發(fā)中的常見(jiàn)模式,對(duì)固定需求和數(shù)據(jù)庫(kù)已經(jīng)存在的開(kāi)發(fā)場(chǎng)景來(lái)看更為有效;使用Model First可以通過(guò)工具設(shè)計(jì)模型及其關(guān)系圖,快速映射出代碼文件(實(shí)體類)和數(shù)據(jù)庫(kù)及其表的關(guān)系;Code First多用于需求不斷變化的敏捷開(kāi)發(fā)中,通過(guò)定義可變化的實(shí)體類模型,通過(guò)EF映射出對(duì)應(yīng)數(shù)據(jù)庫(kù)及其表間關(guān)系。

        敏捷開(kāi)發(fā)起源于上世紀(jì)90年代,通過(guò)反復(fù)迭代的以人中心的開(kāi)發(fā)方式,一種用戶參與探討、商量需求和測(cè)試驅(qū)動(dòng)開(kāi)發(fā)的模式。敏捷開(kāi)發(fā)方式具有很好的“適配性”而非“預(yù)設(shè)性”,能夠很好地處理本接口管理系統(tǒng)中突發(fā)的需求變更和不斷增加的新尋求。

        因此本系統(tǒng)采用基于MSSQL的Code First開(kāi)發(fā)模式,開(kāi)發(fā)的同時(shí)用戶介入測(cè)試和確定新的需求,不斷迭代完成整個(gè)開(kāi)發(fā)過(guò)程。

        2.3 MVC和敏捷開(kāi)發(fā)介紹

        MVC模型來(lái)源于SamllTalk面向?qū)ο笳Z(yǔ)言,通過(guò)3元組: Model(模型)、View(視圖)和Controller(控制器[5-6])來(lái)接收用戶的輸入、業(yè)務(wù)邏輯處理和返回給用戶界面。下面結(jié)合Web三層架構(gòu)和本系統(tǒng)的實(shí)際開(kāi)發(fā)案例分析MVC模式如下:

        模型(Model)是MVC設(shè)計(jì)的核心基礎(chǔ)[7],它是系統(tǒng)的業(yè)務(wù)邏輯層(BLL)和數(shù)據(jù)訪問(wèn)層(DAL)。在Model中,本系統(tǒng)中設(shè)計(jì)有實(shí)體類模型、視圖模型和業(yè)務(wù)類模型。實(shí)體類模型是直接映射數(shù)據(jù)到數(shù)據(jù)庫(kù)相應(yīng)表和存儲(chǔ)數(shù)據(jù)的載體,同時(shí)實(shí)體類模型又可作為控制器和視圖之間的載體,并且在傳入傳出數(shù)據(jù)庫(kù)時(shí)進(jìn)行數(shù)據(jù)驗(yàn)證和維護(hù),保證數(shù)據(jù)的安全性和正確性。對(duì)于復(fù)雜的數(shù)據(jù),本系統(tǒng)中采用更為復(fù)雜的視圖模型進(jìn)行組裝存儲(chǔ)。同時(shí)整個(gè)過(guò)程中,業(yè)務(wù)類模型將根據(jù)需求處理業(yè)務(wù)邏輯,因此模型是系統(tǒng)的業(yè)務(wù)邏輯層(BLL)。本文中的數(shù)據(jù)庫(kù)上下文(DBContext)是數(shù)據(jù)訪問(wèn)層(DAL),可實(shí)現(xiàn)以面向?qū)ο蟮姆绞皆L問(wèn)和管理數(shù)據(jù)庫(kù)。

        視圖(View)是表示層,用戶交互的界面,不處理業(yè)務(wù)邏輯,有利于程序邏輯和表現(xiàn)邏輯的分開(kāi)。

        控制器在三者中扮演著非常重要的角色,它是界面和視圖的協(xié)調(diào)者[7]。接收用戶的輸入,結(jié)合模型響應(yīng)給對(duì)應(yīng)的視圖,實(shí)現(xiàn)了視圖和業(yè)務(wù)邏輯的分離。

        MVC這種松耦合的架構(gòu)特性[8]有利于敏捷團(tuán)隊(duì)的開(kāi)發(fā),同時(shí)用戶需求的變更主要體現(xiàn)在實(shí)體類模型的變更和業(yè)務(wù)需求的處理。實(shí)體類模型變更后直接映射生成對(duì)應(yīng)的數(shù)據(jù)庫(kù)表結(jié)構(gòu),大大提高系統(tǒng)開(kāi)發(fā)的靈活性,編程人員關(guān)注特定的層次和模塊,并行開(kāi)發(fā)。

        2.4 MVC、MSSQL和EF之間的交互

        本文以Interface主頁(yè)上顯示接口數(shù)據(jù)列表數(shù)據(jù)為例,詳細(xì)說(shuō)明MVC(模型、視圖和控制器)內(nèi)部與MSSQL數(shù)據(jù)庫(kù)之間信息交互的整個(gè)流程。在本系統(tǒng)中,它們的相互關(guān)系[8]如圖5所示。

        圖5 MVC、MSSQL和EF間的交互關(guān)系圖

        用戶通過(guò)瀏覽器訪問(wèn)Interface主頁(yè),到獲得頁(yè)面返回的結(jié)果,需要經(jīng)過(guò)以下11個(gè)步驟。

        (1) 用戶通過(guò)瀏覽器頁(yè)面請(qǐng)求,向控制器發(fā)出相關(guān)命令。

        (2) 控制器接收到請(qǐng)求,將請(qǐng)求發(fā)送給Interface業(yè)務(wù)邏輯模型(BLL)進(jìn)行處理。

        (3) 業(yè)務(wù)模型處理過(guò)程中需要使用實(shí)體類存儲(chǔ)數(shù)據(jù)。

        (4) Interface業(yè)務(wù)邏輯模型(BLL)請(qǐng)求數(shù)據(jù)訪問(wèn),需要訪問(wèn)數(shù)據(jù)庫(kù)獲取接口數(shù)據(jù)。

        (5) 數(shù)據(jù)庫(kù)上下文DbContext(DAL)借助EF組建,訪問(wèn)MSSQL數(shù)據(jù)庫(kù)源數(shù)據(jù)。

        (6) MSSQL數(shù)據(jù)庫(kù)返回業(yè)務(wù)數(shù)據(jù)給模型DbContext。

        (7) 對(duì)原始數(shù)據(jù)按照相應(yīng)實(shí)體類進(jìn)行驗(yàn)證和組裝。

        (8) 實(shí)體類數(shù)據(jù)交給業(yè)務(wù)邏輯模型(BLL),進(jìn)行指定的業(yè)務(wù)邏輯處理。

        (9) 業(yè)務(wù)邏輯模型處理完成后,返回給控制器。

        (10) 控制器將數(shù)據(jù)發(fā)送給指定的視圖。

        (11) 該視圖將Interface接口數(shù)據(jù)呈現(xiàn)給用戶。

        至此,對(duì)Interface主頁(yè)的一個(gè)訪問(wèn)周期完成。從上述11個(gè)步驟不難發(fā)現(xiàn),因?yàn)榭刂破鞯膮f(xié)調(diào),頁(yè)面和業(yè)務(wù)邏輯分離,降低了架構(gòu)的耦合性,提高團(tuán)隊(duì)開(kāi)發(fā)效率和代碼重用率。在本系統(tǒng)中,模型分為業(yè)務(wù)邏輯模型(BLL)、實(shí)體類模型(映射數(shù)據(jù)庫(kù))、視圖模型(視圖和控制器之間的數(shù)據(jù)載體)和數(shù)據(jù)庫(kù)訪問(wèn)上下文模型(DAL)。數(shù)據(jù)庫(kù)部分由數(shù)據(jù)庫(kù)上下文和實(shí)體類模型映射產(chǎn)生,大大減少了DBA的工作量和代碼的書(shū)寫(xiě)量。編碼工作主要集中在控制器、實(shí)體類模型、業(yè)務(wù)邏輯部分以及視圖部分,團(tuán)隊(duì)分工、后期維護(hù)和更改更加明確。

        3 數(shù)據(jù)庫(kù)訪問(wèn)上下文與數(shù)據(jù)訪問(wèn)

        3.1 數(shù)據(jù)庫(kù)訪問(wèn)上下文與數(shù)據(jù)庫(kù)

        本系統(tǒng)使用Visual Studio 2012(VS2012)開(kāi)發(fā)平臺(tái),采用MVC+MSSQL +EF架構(gòu),采用Code First開(kāi)發(fā)方式,實(shí)體類模型通過(guò)EF組建映射到MSSQL數(shù)據(jù)庫(kù),生成對(duì)應(yīng)的表和表間關(guān)系。本文由于篇幅限制,僅展示數(shù)據(jù)庫(kù)上下文中DbContext(DAL)中Scorecard和Interface模塊生成的數(shù)據(jù)庫(kù)中的表結(jié)構(gòu),Scorecard相關(guān)表格如圖6所示,其余模塊如圖7所示。

        圖6 實(shí)體類映射生成的數(shù)據(jù)庫(kù)中Scorecard模塊關(guān)系圖

        圖7 實(shí)體類映射生成的數(shù)據(jù)庫(kù)中Interface模塊關(guān)系圖

        數(shù)據(jù)庫(kù)上下文DbContext通過(guò)EF框架將實(shí)體類模型映射到數(shù)據(jù)庫(kù)中,生成對(duì)數(shù)據(jù)庫(kù)中表和表間的關(guān)系。根據(jù)具體需求的變化,更新代碼中的實(shí)體類,通過(guò)MVC+MSSQL+EF直接映射更新數(shù)據(jù)庫(kù)中的表結(jié)構(gòu)和表間關(guān)系,大大提高了開(kāi)發(fā)效率。

        3.2 數(shù)據(jù)訪問(wèn)

        3.2.1 數(shù)據(jù)庫(kù)連接

        本系統(tǒng)中,數(shù)據(jù)庫(kù)連接字符串分為兩類:一類連接外部已有數(shù)據(jù)庫(kù),該連接主要處理與外部系統(tǒng)數(shù)據(jù)的對(duì)接和同步,具體連接類型又分為不同類型的數(shù)據(jù)庫(kù);另一類通過(guò)數(shù)據(jù)庫(kù)上下文將實(shí)體類映射成具體的數(shù)據(jù)庫(kù)并同時(shí)通過(guò)該數(shù)據(jù)庫(kù)上下文訪問(wèn)和控制數(shù)據(jù)庫(kù)。每類連接有多個(gè),分別用于處理不同的對(duì)外系統(tǒng)接口和具體的開(kāi)發(fā)需求。

        本系統(tǒng)Web.config文件中數(shù)據(jù)庫(kù)連接字符串如下所示:

        connectionString=″user id=PhaPortal

        password= PhaPortal;

        Data Source=dbPhaForInterface

        providerName=″Oracle.DataAccess.Client″/>

        connectionString=″server= IntfacePortal;

        database=InterfaceData;

        user id= Interface;

        password=Interface

        ″providerName=″System.Data.SqlClient″ />

        以上兩個(gè)連接字符串:PortalOracle為第一類數(shù)據(jù)庫(kù)字符串中用來(lái)連接Oracle數(shù)據(jù)庫(kù)的;EntitiesInterface用來(lái)處理接口模塊的數(shù)據(jù),在MVC+MSSQL+EF中連接字符串和數(shù)據(jù)庫(kù)上下文類名約定為相同,由連接字符串可以看出數(shù)據(jù)庫(kù)上下文類為EntitiesInterface,該數(shù)據(jù)庫(kù)上下文中的實(shí)體類將直接映射生成數(shù)據(jù)庫(kù)InterfaceData中表格,實(shí)體類之間的關(guān)系將直接映射生成數(shù)據(jù)庫(kù)中的表間關(guān)系,通過(guò)數(shù)據(jù)庫(kù)上下文可直接訪問(wèn)數(shù)據(jù)庫(kù)。

        3.2.2 LINQ to Entities

        通過(guò)Entity Framework和LINQ to SQL可以實(shí)現(xiàn)以面向?qū)ο蟮姆绞竭M(jìn)行訪問(wèn)和管理數(shù)據(jù)庫(kù)[7],大大減少數(shù)據(jù)訪問(wèn)所需要的代碼量,提高了開(kāi)發(fā)的效率。

        LINQ to Entities允許編程人員使用C#根據(jù)實(shí)體數(shù)據(jù)模型編寫(xiě)查詢、插入、修改和刪除操作,滿足大部分?jǐn)?shù)據(jù)庫(kù)相關(guān)操作的需要。本文僅以Interface主頁(yè)接口數(shù)據(jù)查詢未加密部分的所有接口數(shù)據(jù)為例,代碼如下:

        1: EntitiesInterface db = new EntitiesInterface ();

        2: var interfaces=(from temp in db.InterfaceRecord

        3: where temp.AccessControl == “PUBLIC”

        4: select temp.InterfaceRecordID)

        5: .Distinct().ToList();

        代碼第1行,是創(chuàng)建了一個(gè)名為db的數(shù)據(jù)上下文對(duì)象,第2~4行使用LINQ表達(dá)式,從InterfaceRecord表中,查詢?cè)L問(wèn)權(quán)限為“PUBLIC”的所有InterfaceRecordID。第5行去重復(fù)并轉(zhuǎn)化為列表。

        在本系統(tǒng)中使用數(shù)據(jù)庫(kù)上下文更為簡(jiǎn)便的訪問(wèn)方式如下:

        1: EntitiesInterface db = new EntitiesInterface ();

        2: var interfaces= db.InterfaceRecord

        3: .Where(r=>r.AccessControl==″PUBLIC″)

        4: .OrderBy(r => r.DisplayOrder)

        5: .Distinct().ToList();

        這里舉例,實(shí)際開(kāi)發(fā)中可以實(shí)現(xiàn)更為復(fù)雜的操作,需要結(jié)合以上兩種方式進(jìn)行數(shù)據(jù)訪問(wèn)和管理。

        3.2.3 LINQ to DataSet

        DataSet是生成ADO.NTE的斷開(kāi)連接式編程模型的關(guān)鍵組件,它是數(shù)據(jù)源中檢索到的數(shù)據(jù)在內(nèi)存中的緩存[3,7]。本系統(tǒng)中通過(guò)數(shù)據(jù)庫(kù)訪問(wèn)字符串名PortalOracle(參考3.2.1節(jié)),借助SqlDataAdapter,執(zhí)行相應(yīng)的存儲(chǔ)過(guò)程以及參數(shù),實(shí)例化DataSet對(duì)象,并通過(guò)Fill方法實(shí)現(xiàn)DataSet和Oracle數(shù)據(jù)庫(kù)之間的橋接[3,7],將數(shù)據(jù)填充到DataSet中。最后通過(guò)LINQ查詢表達(dá)式從DataSet中獲取相應(yīng)的數(shù)據(jù)。旨在解決關(guān)聯(lián)多張表和業(yè)務(wù)邏輯復(fù)雜的查詢過(guò)程中效率低的問(wèn)題。

        4 版本實(shí)時(shí)發(fā)布、外部系統(tǒng)數(shù)據(jù)同步與自動(dòng)生成接口機(jī)制

        Jenkins是基于Java開(kāi)發(fā)的一種持續(xù)繼承工具[3],并且是一個(gè)開(kāi)源軟件項(xiàng)目,用于監(jiān)控持續(xù)重復(fù)的工作,本系統(tǒng)中主要的應(yīng)用功能如下:

        (1) 持續(xù)發(fā)布軟件版本和測(cè)試項(xiàng)目。

        (2) 監(jiān)控外部調(diào)用執(zhí)行的操作。

        4.1 版本實(shí)時(shí)發(fā)布和外部系統(tǒng)數(shù)據(jù)同步機(jī)制

        為了實(shí)時(shí)發(fā)布新版本,本系統(tǒng)結(jié)合SVN和Jenkins機(jī)制,實(shí)時(shí)發(fā)布新版本,其基本結(jié)構(gòu)如圖8所示。

        圖8 團(tuán)隊(duì)開(kāi)發(fā)和實(shí)時(shí)發(fā)布版本機(jī)制

        設(shè)計(jì)思路如下:同步SVN服務(wù)器中的最新代碼版本,使用編譯命令編譯后存放到指定的服務(wù)器目錄。示例代碼如下:

        1:Path C:WINDOWSMicrosoft.NETFrameworkv4.0.30319

        2:aspnet_compiler-v/-p .REPETRTORY-f-d-u.REALSE

        該代碼第2行中. REPETRTORY為目前最新代碼目錄,. REALSE為編譯后存放地址,即IIS部署目錄。

        外部系統(tǒng)數(shù)據(jù)自動(dòng)同步機(jī)制采用類似的方式,本系統(tǒng)中結(jié)合使用Robocopy和Jenkins,監(jiān)控外部接口數(shù)據(jù)庫(kù)的更新,實(shí)施刷新本系統(tǒng)中需要使用的外部數(shù)據(jù),保證數(shù)據(jù)的完整性和正確性,同時(shí)介紹DBA的工作量。

        4.2 自動(dòng)生成接口機(jī)制

        在軟件平臺(tái)開(kāi)發(fā)中,在新增加的系統(tǒng)平臺(tái)中增加新的規(guī)格和新的版本,具體到代碼實(shí)現(xiàn)將需要增加新的接口和新的函數(shù)實(shí)現(xiàn)。本系統(tǒng)中,通過(guò)規(guī)格和版本設(shè)計(jì)者或定義者設(shè)計(jì)相關(guān)的接口,通過(guò)接口定義將生成對(duì)應(yīng)的函數(shù),具體函數(shù)實(shí)現(xiàn)由對(duì)應(yīng)的軟件開(kāi)發(fā)者根據(jù)業(yè)務(wù)邏輯和需求具體實(shí)現(xiàn)。

        如圖9所示,通過(guò)瀏覽器訪問(wèn)接口管理系統(tǒng),定義和設(shè)計(jì)相應(yīng)的接口,InterfaceParameter提供具體的設(shè)計(jì)語(yǔ)言和實(shí)際類型,結(jié)合InterfaceRecord和InterfaceDetail表生成完整的接口定義內(nèi)容。本系統(tǒng)通過(guò)接口定義內(nèi)容和該接口所屬于的模塊(包含生成代碼文件相對(duì)地址、模塊具體文件名、代碼語(yǔ)言等)生成對(duì)應(yīng)的代碼文件和實(shí)現(xiàn)該接口的空函數(shù)文件。整個(gè)生成接口和函數(shù)代碼文件的過(guò)程是跨語(yǔ)言和可配置的,符合不同軟件平臺(tái)實(shí)際應(yīng)用的需要。

        圖9 自動(dòng)生成接口代碼機(jī)制

        5 系統(tǒng)界面實(shí)例

        在本系統(tǒng)中,界面設(shè)計(jì)應(yīng)用到了HTML5、CSS、Ajax、JavaScript和JQuery等相關(guān)技術(shù)。本文搭建的軟件平臺(tái)接口管理系統(tǒng)是一個(gè)比較復(fù)雜的網(wǎng)站,界面較多,本文列出主要界面,如圖10所示。

        圖10 網(wǎng)站總體界面結(jié)構(gòu)

        本系統(tǒng)為企業(yè)內(nèi)部軟件平臺(tái)接口管理系統(tǒng),部署在公司內(nèi)網(wǎng),公司內(nèi)部的用戶,可通過(guò)匿名方式訪問(wèn)公共開(kāi)放的接口業(yè)務(wù)數(shù)據(jù)。對(duì)于有權(quán)限設(shè)置的接口數(shù)據(jù)和管理功能,系統(tǒng)做了強(qiáng)制登錄設(shè)置和加密設(shè)置,同時(shí)加密功能也實(shí)現(xiàn)可配置,采用公私鑰加密、時(shí)間地點(diǎn)控制、網(wǎng)頁(yè)水印等多種可配置方式。

        本文僅對(duì)接口、測(cè)試用例、測(cè)試結(jié)果和團(tuán)隊(duì)故事作簡(jiǎn)單展示,如圖11-圖14所示。圖11是Interface主頁(yè),因?yàn)榘婷嫦拗?,呈現(xiàn)3類接口數(shù)據(jù)為配頻、本振和柵壓,詳細(xì)接口數(shù)據(jù)和測(cè)試用例(如圖12所示)和測(cè)試腳本點(diǎn)擊接口名即可獲取。通過(guò)系統(tǒng)測(cè)試用例生成對(duì)應(yīng)測(cè)試腳本,本文以外場(chǎng)故障機(jī)器問(wèn)題排查過(guò)程中,采用IQ采樣數(shù)據(jù)腳本為例,生成IQ相位數(shù)據(jù)的如圖14所示。圖13為本系統(tǒng)為多個(gè)部門、敏捷團(tuán)隊(duì)和成員的用戶故事卡統(tǒng)計(jì)呈現(xiàn)。本系統(tǒng)中所有數(shù)據(jù)顯示的格式、顯示的方式、背景顏色等都是可通過(guò)對(duì)應(yīng)管理頁(yè)面進(jìn)行參數(shù)配置的。

        圖11 Interface主頁(yè)(部分內(nèi)容)

        圖12 Interface對(duì)應(yīng)測(cè)試用例(部分內(nèi)容)

        圖13 Interface對(duì)應(yīng)敏捷團(tuán)隊(duì)故事卡呈現(xiàn)(部分內(nèi)容)

        圖14 測(cè)試團(tuán)隊(duì)采用系統(tǒng)生成的腳本IQ采樣結(jié)果(部分內(nèi)容)

        6 結(jié) 語(yǔ)

        本文在ADO.NET平臺(tái)中,基于MVC+MSSQL+EF的架構(gòu),采用符合敏捷開(kāi)發(fā)方式的Code First開(kāi)發(fā)方案,彌補(bǔ)了MVC結(jié)合敏捷開(kāi)發(fā)、自動(dòng)生成代碼開(kāi)發(fā)方面研究的不足。利用Jenkins搭建的兩種機(jī)制,利于團(tuán)隊(duì)開(kāi)發(fā)并實(shí)時(shí)發(fā)布新版本以及自動(dòng)同步外部系統(tǒng)數(shù)據(jù),保證系統(tǒng)中數(shù)據(jù)的實(shí)時(shí)性、完整性和正確性。對(duì)于外部系統(tǒng)的數(shù)據(jù)利用反射的方式動(dòng)態(tài)獲取數(shù)據(jù),并結(jié)合本系統(tǒng)中數(shù)據(jù)整合后呈現(xiàn)出來(lái),給多系統(tǒng)多平臺(tái)數(shù)據(jù)統(tǒng)計(jì)和管理提供了合理有效的解決方案。

        同時(shí),本軟件平臺(tái)接口管理系統(tǒng),主要有3大核心功能:(1) 接口設(shè)計(jì)、統(tǒng)計(jì)和生成測(cè)試用例以及交互;(2) 以接口為單位劃分責(zé)任、審查和考核依據(jù);(3) 以接口實(shí)現(xiàn)衍生出的各部門各敏捷團(tuán)隊(duì)和成員的用戶故事卡、迭代周期等數(shù)據(jù)的統(tǒng)計(jì)和呈現(xiàn)。具體系統(tǒng)的實(shí)現(xiàn)展開(kāi)為8大模塊。

        在本系統(tǒng)中,以核心功能(1)為例,從RRU產(chǎn)品軟件交付的流程來(lái)看:首先,接口代碼設(shè)計(jì)者設(shè)計(jì)和修改接口的同時(shí)生成對(duì)應(yīng)的代碼;繼而具體接口實(shí)現(xiàn)者,根據(jù)對(duì)應(yīng)業(yè)務(wù)邏輯實(shí)現(xiàn)接口的功能;然后,接口功能測(cè)試者,可通過(guò)本接口管理系統(tǒng)直接生成對(duì)應(yīng)接口的測(cè)試腳本,完成該接口的測(cè)試、統(tǒng)計(jì)和分析(見(jiàn)圖14)并保存測(cè)試結(jié)果;通過(guò)接口的篩選,匯總對(duì)外和對(duì)高層的接口,最終實(shí)現(xiàn)軟件流程的交互。

        此外,所開(kāi)發(fā)的軟件平臺(tái)接口系統(tǒng),對(duì)使用MSSQL數(shù)據(jù)庫(kù)進(jìn)行敏捷開(kāi)發(fā)方式開(kāi)發(fā)的信息系統(tǒng)、軟件系統(tǒng)功能測(cè)試、實(shí)時(shí)發(fā)布新版本、多系統(tǒng)數(shù)據(jù)實(shí)時(shí)同步具有一定的參考價(jià)值。

        [1] 榮國(guó)平,劉天宇,謝明娟,等.嵌入式系統(tǒng)開(kāi)發(fā)中敏捷方法的應(yīng)用研究綜述[J].軟件學(xué)報(bào),2014,25(2):267-283.

        [2] 李新.敏捷開(kāi)發(fā)平臺(tái)的設(shè)計(jì)[J].計(jì)算機(jī)工程與設(shè)計(jì),2012,33(9):3604-3608.

        [3] 周敏,高濟(jì),金志勇.基于MVC+ORACLE+ODAC的企業(yè)內(nèi)部業(yè)務(wù)數(shù)據(jù)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用與軟件,2016,33(10):72-76,81.

        [4] 高宏,王婷婷.基于MVC和Entity Framework的團(tuán)餐系統(tǒng)[J].計(jì)算機(jī)與現(xiàn)代化,2014,2332(12):66-70.

        [5] 黃佑夫,李建強(qiáng),徐坤.基于Ajax與MVC的RFID讀寫(xiě)器B/S管理系統(tǒng)的設(shè)計(jì)實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用與軟件,2016,33(11):46-48.

        [6] 孫光明,王碩.基于JSON 的Ajax數(shù)據(jù)通信快速算法[J].計(jì)算機(jī)應(yīng)用與軟件,2015,32(1):263-266.

        [7] 李志,賈克斌,李真真,等.基于.NET MVC架構(gòu)的網(wǎng)上珠寶銷售系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用與軟件,2013,30(3):186-189,192.

        [8] 任廣震,侯進(jìn),王獻(xiàn).MVC模式在B/S結(jié)構(gòu)政務(wù)系統(tǒng)的應(yīng)用研究[J].計(jì)算機(jī)應(yīng)用與軟件,2014,31(8):54-58,74.

        DESIGNANDIMPLEMENTATIONOFSOFTWAREPLATFORMINTERFACEMANAGEMENTSYSTEMBASEDONMVC+MSSQL+EF

        Zhou Min Wang Yong Zhang Yuantao Zhao Yun

        (RRUSoftwareDepartment,ShanghaiZhongxingSoftwareCo.,Ltd.,Shanghai201203,China)

        At present, the interactions between development, debugging and testing in many developments of software platform system are based on interface data. Meanwhile, the interface is divided into the responsible person, code review and employee performance evaluation. Therefore, statistics, presentation and management of the interface data are particularly important. This paper analyzes the present situation of software platform interface management system in most enterprises. First, different platforms, versions, and departmental interface data are not synchronized in time, and thus data is incomplete. Second, interface design, implementation, review, testing, and delivery are relatively independent, resulting in inconsistent and unreliable data. Third, many system interface data are relatively fragmented and the user interfaces of most system cannot be configured so that the latter statistics and maintain the load is heavy. In view of this demand and current situation, we adopted the agile development methods based on architecture of MVC+MSSQL+EF, and combined with the mechanism of SVN, Phabricator, Robocopy and Jenkins for automatic data synchronization and real-time new versions release. This paper focuses on the overall framework of the system, the design of the entity class model, the dynamic configuration of the foreground, the application of the MVC+MSSQL+EF architecture in the system and its key technologies. The system has been applied to RRU/BBU and other departments of a communication company of Shanghai. The actual operation proves that the system has the characteristics of cross department, cross platform, configurable, efficient, safe and reliable.

        Interface MVC EF Configuration Agile development Jenkins

        TP3

        A

        10.3969/j.issn.1000-386x.2017.10.009

        2017-01-05。周敏,碩士生,主研領(lǐng)域:軟件工程,多Agent服務(wù)協(xié)同。王勇,碩士。張遠(yuǎn)濤,碩士。趙云,本科。

        猜你喜歡
        視圖代碼數(shù)據(jù)庫(kù)
        創(chuàng)世代碼
        創(chuàng)世代碼
        創(chuàng)世代碼
        創(chuàng)世代碼
        5.3 視圖與投影
        視圖
        Y—20重型運(yùn)輸機(jī)多視圖
        SA2型76毫米車載高炮多視圖
        數(shù)據(jù)庫(kù)
        數(shù)據(jù)庫(kù)
        日韩精品在线观看在线| 成人大片在线观看视频| 亚洲成人av在线播放不卡| 狠色人妻丝袜中文字幕| 亚洲一区二区在线观看网址| 99久久99久久精品国产片| 亚洲综合色区另类av| 中文字幕第七页| 九九日本黄色精品视频| 久久亚洲中文字幕精品熟| 国产成人午夜无码电影在线观看| 欧美成人看片黄a免费看| 天天射色综合| 国产亚洲av手机在线观看| 亚洲国产系列一区二区| 妇女bbbb插插插视频| 天码人妻一区二区三区| 欧美亚洲高清日韩成人| 波多吉野一区二区三区av| 视频女同久久久一区二区| 国产成人精品日本亚洲专区61| 欧美成人精品一区二区综合| 欧美日韩一区二区三区视频在线观看| 99久久亚洲精品加勒比| 亚洲成熟中老妇女视频| 亚洲人成精品久久久久| 日本黄页网站免费观看| 久精品国产欧美亚洲色aⅴ大片 | 亚洲日韩中文字幕一区| 久久国产国内精品对话对白| 日韩久久无码免费看A| 最新中文字幕亚洲一区| 免费无码中文字幕a级毛片| 国产特级全黄一级毛片不卡| 加勒比特在线视频播放| 国产亚洲精品久久久久5区| 久久精品人人做人人爽| 国内精品久久久久影院蜜芽| 日本一道本加勒比东京热| 日韩网红少妇无码视频香港| 免费国产黄网站在线观看|