质量属性战术
某某征集系統(tǒng)在設(shè)計時所實現(xiàn)的質(zhì)量屬性戰(zhàn)術(shù)以及原因
一、 可用性戰(zhàn)術(shù)(恢復(fù)和修復(fù)是可用性的重要方面,為了阻止錯誤發(fā)展成故障,至少能夠把錯誤限制在一定的范圍內(nèi),從而使修復(fù)成為可能)
????? 大家都知道,系統(tǒng)故障是不可避免的,比如系統(tǒng)不能啟動、顯示黑屏或藍(lán)屏、桌面凝固不動、鍵盤不能輸入、光標(biāo)不能移動、軟件運(yùn)行非正常中斷,再比如應(yīng)用軟件與操作系統(tǒng)不完全兼容,它們之間有沖突或者與硬件固有特性發(fā)生沖突等故障。所以對于某某征集系統(tǒng),在可用性設(shè)計時運(yùn)用了事務(wù)的戰(zhàn)術(shù),這是因為事務(wù)就是綁定幾個有序的步驟,以能夠立刻撤銷整個綁定。如果進(jìn)程中的一個步驟失敗的話,可以使用事務(wù)來防止任何數(shù)據(jù)受到影響,還可以使用事務(wù)來防止訪問相同數(shù)據(jù)的幾個同時線程之間發(fā)生沖突。事務(wù),就是一組操作數(shù)據(jù)庫的動作集合。如果一組處理步驟或者全部發(fā)生或者一步也不執(zhí)行,我們稱該組處理步驟為一個事務(wù)。當(dāng)所有的步驟像一個操作一樣被完整地執(zhí)行,我們稱該事務(wù)被提交。由于其中的一部分或多步執(zhí)行失敗,導(dǎo)致沒有步驟被提交,則事務(wù)必須回滾到最初的系統(tǒng)狀態(tài)。
????? 在某某征集系統(tǒng)中,采用了Spring事務(wù)策略,也就是spring事務(wù)管理的實現(xiàn)方式。它有一個統(tǒng)一的抽象,是由實現(xiàn)下面這個接口完成的。???????? org.springframework.transaction.PlatformTransactionManager接口的內(nèi)容如下:
Public interface PlatformTransactionManager()
{ ?
TransactionStatue getTransaction(TransactionDefinition definition) throws TransactionException; ?
Void commit(TransactionStatus status) throws TransactionException; ?
Void rollback(TransactionStatus status) throws TransactionException; ?
}?
?????? 不管是聲明式的還是編程式的事務(wù)管理都需要此抽象來完成,getTransaction() 根據(jù)類型為TransactionDefinition的參數(shù)返回一個TransactionStatus對象。返回的 TransactionStatus對象可能代表一個新的或已經(jīng)存在的事務(wù)(如果在當(dāng)前調(diào)用堆棧有一個符合條件的事務(wù))。如同J2EE事務(wù)上下文,一個 TransactionStatus也是和執(zhí)行的線程關(guān)聯(lián)的。同時,在框架中還存在TransactionDefinition接口,即上邊的參數(shù)類型。此接口指定了事務(wù)隔離程度、事務(wù)傳播、事務(wù)超時、只讀狀態(tài)。另外,還有TransactionStatus接口。這個接口為處理事務(wù)提供簡單的控制事務(wù)執(zhí)行和查詢事務(wù)狀態(tài)的方法。
spring提供了幾個關(guān)于事務(wù)處理的類:?
TransactionDefinition //事務(wù)屬性定義
TranscationStatus //代表了當(dāng)前的事務(wù),可以提交,回滾。
PlatformTransactionManager是spring提供的用于管理事務(wù)的基礎(chǔ)接口,其下有一個實現(xiàn)的抽象類 AbstractPlatformTransactionManager,我使用的事務(wù)管理類例如 DataSourceTransactionManager等都是這個類的子類。
?二、可修改性戰(zhàn)術(shù)(可修改戰(zhàn)術(shù)的目標(biāo)是控制實現(xiàn)、測試和部署變更的時間和成本)
???? 對于某某征集系統(tǒng)的在線填報模塊,我采用了信息隱藏的戰(zhàn)術(shù)。信息隱藏就是把該功能模塊的責(zé)任分解為更小的部分,并選擇使那些基本不變的基礎(chǔ)信息成為公有的,那些重要的技術(shù)信息成為私有的,可以通過指定的接口獲得公有責(zé)任。信息隱藏的目的是將變更隔離在一個模塊內(nèi),防止變更擴(kuò)散到其他模塊。它與“預(yù)期期望的變更有很大關(guān)系”,因為它使用那些變更作為分解的基礎(chǔ)。
三、性能戰(zhàn)術(shù)(性能戰(zhàn)術(shù)的目標(biāo)就是對在一定的時間限制內(nèi)到達(dá)系統(tǒng)的事件生成一個響應(yīng))
???? 針對于某某征集系統(tǒng)的性能戰(zhàn)術(shù),我采用了固定優(yōu)先級的調(diào)度策略,為每個企業(yè)的提交請求分配一個特定的優(yōu)先級,并按該優(yōu)先級順序?qū)μ峤坏谋韱芜M(jìn)行審核。該策略能夠保證為企業(yè)優(yōu)先級較高的請求提供更好的服務(wù),但是,對一些優(yōu)先級較低的請求來說,可能要等待很長的時間才能得到服務(wù),因為它前面有很多優(yōu)先級較高的請求。所有我設(shè)計的優(yōu)先級策略是輪轉(zhuǎn)調(diào)度策略,它對請求進(jìn)行排序,然后在允許的時候,把資源分配給該排序中的下一個請求。輪轉(zhuǎn)的一個特殊形式就是循環(huán)執(zhí)行,在循環(huán)執(zhí)行中,資源分配是每隔一個固定的時間進(jìn)行的。
四、 安全性戰(zhàn)術(shù)(安全性戰(zhàn)術(shù)分為:與抵抗攻擊有關(guān)的戰(zhàn)術(shù)、與檢測攻擊有關(guān)的戰(zhàn)術(shù)以及從攻擊中恢復(fù)有關(guān)的戰(zhàn)術(shù))
????? 對于某某征集系統(tǒng)來說,安全性要求是非常高的,因為這涉及到某個省份的發(fā)展,所以在設(shè)計某某征集系統(tǒng)時,安全性問題是至關(guān)重要的。首先,我采用了MD5加密, MD5加密算法主要用在用戶注冊用戶名和密碼的加密,對于普通強(qiáng)度的口令加密。但是簡單的MD5加密是沒有辦法達(dá)到絕對的安全的,因為普通的MD5加密有多種暴力破解方式,因此如果想要保證該征集系統(tǒng)的安全,還需要采用其他的安全性戰(zhàn)術(shù)。該征集系統(tǒng)開啟以后很多地方要用到數(shù)據(jù)庫里的字典數(shù)據(jù),比如部門表,歸口管理表,這些數(shù)據(jù)是可變的,但是變化頻率很小,所有每次用到的時候都去數(shù)據(jù)庫取數(shù)據(jù)很明顯的是對資源的浪費(fèi),所以想按照以前的方法把數(shù)據(jù)從數(shù)據(jù)庫里讀取出來,放到內(nèi)存,每次用到的時候直接去內(nèi)存找就可以了。想法應(yīng)該是沒有問題的,可是這個學(xué)期需要用到SSH框架,所以另配一個listener和Spring同時啟動的做法是不可取的。因為listener的啟動機(jī)制是線程,并不是按順序一個一個啟動,所有直接在spring的配置文件里,注冊bean文件,讓 bean文件來執(zhí)行取數(shù)據(jù)的工作,但是這個bean顯然是不能使用DAO的類,因為DAO層的東西無法注入進(jìn)來,所以用到的是BeanPostProcessor接口,用類PBSTrackManagerPostProcessor實現(xiàn)它其中的一個方法 postProcessAfterInitialization,這個方法里可以引入一個類GetDictionaryInfo,實現(xiàn)類的方法 getAllInfo(),當(dāng)getAllInfo去調(diào)用DAO層的數(shù)據(jù)時就可以了。
五、 可測試性戰(zhàn)術(shù)(可測試性戰(zhàn)術(shù)目標(biāo)是允許在完成一個軟件開發(fā)的增量后,輕松地對軟件進(jìn)行測試)
????? 對于某某征集系統(tǒng),我用Spring整合了JUnit框架進(jìn)行單元測試代碼, AbstractTransactionalSpringContextTests類是?AbstractDependencyInjectionSpringContextTests的直接子類,這個類一般應(yīng)用在事務(wù)相關(guān)的測試中,一旦完成每個測試它就會正常地回滾事務(wù),不會真正更新數(shù)據(jù)庫,若要手動設(shè)置事務(wù)相關(guān)操作,可以重載onSetUpInTransaction和?onTearDownInTransaction方法,以便手工開始并提交事務(wù),或者調(diào)用setComplete()方法。這個類也可以在沒有事務(wù)的情況下使用。AbstractTransactionalDataSourceSpringContextTests也是?AbstractTransactionalSpringContextTests的直接子類,它使用了Spring的基于JDBC 的?jdbcTemplate工具類,支持?jǐn)?shù)據(jù)庫級別的事務(wù)。關(guān)于在TestCase?Class里取得spring?context,TestCase?Class必須繼承四個AbstractXXXSpringContextTests中的其中一個,那么就必須實現(xiàn)?protected?abstract?String[]?getConfigLocations();方法來取得spring?context。需要注意要加載的context?xml?file的路徑問題:我的代碼是基于classpath,因此applicationContext.xml和hibernate-?context.xml必須放在classpath里,也就是把xml?files放到WEB-INF/classes目錄下,或者是在project?properties里把xml?files的路徑加到classpath里。
六、易用性戰(zhàn)術(shù)(易用性與用戶完成期望任務(wù)的難易程度以及系統(tǒng)為用戶提供的支持種類有關(guān))
????? 在測試過程中,通常會頻繁修改用戶接口。也就是說,易用性要求開發(fā)人員實現(xiàn)對當(dāng)前接口設(shè)計的修改,所以必須對語義一致的可修改性的求精。將用戶接口與應(yīng)用的其余部分分離開來。局部化所期望的變更是語義一致的一個基本原理。因為在開發(fā)中和部署后,我們預(yù)計用戶接口頻繁發(fā)生變化,因此單獨維護(hù)用戶接口代碼將會變更局部化在某個地方。開發(fā)用于實現(xiàn)該戰(zhàn)術(shù)并支持用戶接口修改的軟件架構(gòu)模式為:模型——視圖——控制器。MVC是一種設(shè)計模式,它強(qiáng)制性的把應(yīng)用程序的輸入、處理和輸出分開。MVC把應(yīng)用程序分為三個核心模塊:模型、視圖和控制器,它們分別負(fù)擔(dān)不同的任務(wù):(1)視圖是用戶看到并與之交互的界面。視圖向用戶顯示相關(guān)的數(shù)據(jù),并能夠接受用戶的輸入數(shù)據(jù),但是它并不進(jìn)行任何實際的業(yè)務(wù)處理。視圖可以向模型查詢業(yè)務(wù)狀態(tài),但不能改變模型,視圖還能接受模型發(fā)出的數(shù)據(jù)更新事件,從而對用戶界面進(jìn)行同步更新。(2)模型是應(yīng)用程序的主要部分。模型表示業(yè)務(wù)數(shù)據(jù)和業(yè)務(wù)邏輯。一個模型能為多個視圖提供數(shù)據(jù),由于同一個模型可以被多個視圖重用,所以提高了應(yīng)用的可重用性。(3)控制器接受用戶的輸入并調(diào)用模型和視圖去完成用戶的需求。當(dāng)Web用戶單擊Web頁面中的提交按鈕來發(fā)送HTML表單時,控制器接受請求并調(diào)用相應(yīng)的模型去處理請求,然后調(diào)用相應(yīng)的視圖來顯示模型返回的數(shù)據(jù)。MVC處理過程,首先控制器接受用戶的請求,并決定應(yīng)調(diào)用哪個模型來進(jìn)行處理;然后模型根據(jù)用戶請求進(jìn)行相應(yīng)的業(yè)務(wù)邏輯處理,并返回數(shù)據(jù);最后控制器調(diào)用相應(yīng)的視圖來格式化模型返回的數(shù)據(jù),并通過視圖呈現(xiàn)給用戶。
????? 對于某某征集系統(tǒng),我用JSP頁面生成表示層的內(nèi)容,讓Servlet完成深層次的處理任務(wù),在這里,Servlet充當(dāng)控制器的角色,負(fù)責(zé)處理用戶請求,創(chuàng)建JSP頁面需要使用的JavaBean對象,根據(jù)用戶請求選擇合適的JSP頁面返回給用戶。在JSP頁內(nèi)沒處理邏輯,它僅負(fù)責(zé)檢索原先由Servlet創(chuàng)建的JavaBean對象,從Servlet中提取動態(tài)內(nèi)容插入到靜態(tài)模板。這是一種有突破性的軟件設(shè)計方法,它清晰地分離了表達(dá)和內(nèi)容,明確了角色定義以及開發(fā)與網(wǎng)頁設(shè)計的分工。
轉(zhuǎn)載于:https://www.cnblogs.com/niujunyan/p/6637901.html
總結(jié)
- 上一篇: 黄金期货有哪些交易规则,一手黄金期货要多
- 下一篇: ORACLE 19C 单实例数据库安装