国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

ABP框架及其在WEB項(xiàng)目開發(fā)中的應(yīng)用

2019-04-19 05:18:28郝樹青
關(guān)鍵詞:開發(fā)人員日志稅務(wù)

郝樹青,武 彤

(貴州大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,貴州 貴陽 550025)

0 引 言

在實(shí)際項(xiàng)目開發(fā)中,常常需要針對(duì)不同的需求開發(fā)不同的應(yīng)用。但是在某些方面,又需要一次次地重復(fù)實(shí)現(xiàn)一些通用的和類似的,如身份驗(yàn)證、權(quán)限管理、異常處理、審計(jì)日志等功能。由于實(shí)現(xiàn)這些功能通常非常耗時(shí)且很難單獨(dú)創(chuàng)建,國內(nèi)外的很多公司開發(fā)了自己的框架模版,他們可以用自己的框架快速地開發(fā)新應(yīng)用。但并不是所有的公司都可以擁有自己的開發(fā)框架,大部分的公司沒有時(shí)間、預(yù)算乃至團(tuán)隊(duì)來開發(fā)一個(gè)好的框架,何況框架文檔的編寫、開發(fā)人員的培訓(xùn)以及框架的維護(hù)都是相當(dāng)耗費(fèi)時(shí)間和精力的。

ABP是一個(gè)開源且文檔完善的項(xiàng)目框架,其開發(fā)宗旨是為所有的公司、開發(fā)人員開發(fā)出一個(gè)通用的項(xiàng)目框架模版。而且它不僅僅是一個(gè)項(xiàng)目框架,ABP同時(shí)提供了一個(gè)基于DDD(領(lǐng)域驅(qū)動(dòng)設(shè)計(jì))的構(gòu)架模型和最佳實(shí)踐。

ABP框架是基于ASP.NET的WEB項(xiàng)目開發(fā)框架,是GitHub上非?;钴S的一個(gè)開源項(xiàng)目。它的出現(xiàn),大大降低了WEB應(yīng)用程序開發(fā)的難度,提高了代碼復(fù)用率,方便開發(fā)人員更容易地建立WEB應(yīng)用程序和WEB服務(wù)。它將ASP.NET開發(fā)中常用的一些工具整合到一起,是一個(gè)開箱即用的框架。相較于Apworks、Akka.net、Orleans等WEB項(xiàng)目框架,ABP框架文檔完善、入門容易、功能齊全、適用范圍廣且完全免費(fèi),因此,在使用C#語言開發(fā)的工會(huì)經(jīng)費(fèi)稅務(wù)代收數(shù)據(jù)管理平臺(tái)中引入ABP開發(fā)框架,可以降低項(xiàng)目開發(fā)的整體難度,使開發(fā)人員專注于系統(tǒng)功能開發(fā),將WEB項(xiàng)目開發(fā)中常用的身份認(rèn)證、權(quán)限管控、異常處理、日志、本地化、數(shù)據(jù)庫連接管理、設(shè)置管理等功能從開發(fā)過程中剔除,縮短WEB項(xiàng)目開發(fā)周期,提升WEB項(xiàng)目開發(fā)效率,降低WEB項(xiàng)目開發(fā)成本。

1 ABP開發(fā)框架概述

1.1 ABP框架

ABP全稱是ASP.NET Boilerplate Project,是ASP.NET樣板項(xiàng)目的簡(jiǎn)稱,ABP是一個(gè)用最佳實(shí)踐和流行技術(shù)開發(fā)現(xiàn)代WEB應(yīng)用程序的新起點(diǎn),旨在成為一個(gè)通用的WEB應(yīng)用程序框架和項(xiàng)目模版[1]。ABP是基于DDD的經(jīng)典分層架構(gòu)思想進(jìn)行設(shè)計(jì)的,主要有以下優(yōu)點(diǎn):

(1)ABP實(shí)現(xiàn)了依賴注入軟件設(shè)計(jì)模式。依賴注入是用來實(shí)現(xiàn)控制反轉(zhuǎn)(IOC)的最常見方式之一[2],ABP可以簡(jiǎn)化并且自動(dòng)使用依賴注入,把對(duì)象的創(chuàng)建交給IOC容器去管理,以實(shí)現(xiàn)代碼間的松耦合,進(jìn)而提升代碼的靈活性、可擴(kuò)展性和可維護(hù)性。ABP默認(rèn)能為每個(gè)實(shí)體(Entity)創(chuàng)建一個(gè)倉儲(chǔ)(Repository)類,只需要實(shí)現(xiàn)IRepository接口,默認(rèn)倉儲(chǔ)包含許多有用的方法,比如Select,Insert,Update,Delete方法(CRUD操作)。開發(fā)人員可以根據(jù)需求,擴(kuò)展這些默認(rèn)倉儲(chǔ),倉儲(chǔ)抽象了數(shù)據(jù)庫管理系統(tǒng)(DBMS)和對(duì)象關(guān)系映射(ORM)以及簡(jiǎn)化了數(shù)據(jù)訪問邏輯。

(2)內(nèi)置了權(quán)限驗(yàn)證。ABP是基于模塊化設(shè)計(jì)的,所以不同的模塊可以有不同的權(quán)限。比如,在當(dāng)前用戶沒有登錄或沒有權(quán)限時(shí),ABP會(huì)阻止其訪問指定方法或界面。ABP使用了陳述性的特性來簡(jiǎn)化授權(quán),當(dāng)然ABP還有其他的授權(quán)驗(yàn)證方式。

(3)默認(rèn)使用Log4Net組件來實(shí)現(xiàn)日志操作,可以用定義在基類中的Logger對(duì)象寫日志。ABP還提供了能夠?yàn)閼?yīng)用程序交互自動(dòng)記錄日志的審計(jì)系統(tǒng),它能記錄調(diào)用方法的調(diào)用者信息和參數(shù)信息。同時(shí)開發(fā)人員幾乎不用為任何異常指定異常處理操作。當(dāng)異常發(fā)生時(shí),ABP會(huì)自動(dòng)記錄異常信息并做出適當(dāng)?shù)捻憫?yīng)返回信息到客戶端呈現(xiàn)。ABP內(nèi)置了一個(gè)本地化配置模塊,可實(shí)現(xiàn)系統(tǒng)對(duì)多國語言的支持。ABP在拋出異常時(shí),使用本地化L方法可自動(dòng)根據(jù)用戶所在區(qū)域,調(diào)用相應(yīng)的本地化信息提示。

(4)ABP使用了工作單元(Unit Work)模式,將每一個(gè)應(yīng)用服務(wù)方法都默認(rèn)為一個(gè)工作單元,這樣可以很好地保證數(shù)據(jù)的完整性。同時(shí)ABP把ASP.NET WEB API控制器集成到Abp.Web.API中,只需要通過Nuget來安裝它,開發(fā)人員就可以創(chuàng)建常規(guī)的ASP.NET WEB API控制器為JavaScript客戶端公開方法。ABP會(huì)在運(yùn)行時(shí)自動(dòng)完成這件事,而后即可直接在客戶端調(diào)用應(yīng)用服務(wù)。ABP可創(chuàng)建JavaScript代理方法,以便在客戶端如本地調(diào)用一樣來調(diào)用應(yīng)用服務(wù)。

1.2 ABP體系結(jié)構(gòu)

為了減少代碼的復(fù)雜性以及提高代碼的可重用性,分層架構(gòu)是常用的技術(shù)[3]。ABP以DDD設(shè)計(jì)原則來實(shí)現(xiàn)分層架構(gòu),將項(xiàng)目分為四層:應(yīng)用層、領(lǐng)域?qū)印⒒A(chǔ)設(shè)施層和展現(xiàn)層。開發(fā)人員可以根據(jù)實(shí)際開發(fā)需求添加額外的層,如分布式服務(wù)層等。

初始的ABP解決方案大致包含7個(gè)項(xiàng)目,每層由一個(gè)或者多個(gè)程序集來實(shí)現(xiàn)。

應(yīng)用層(Application):應(yīng)用層主要進(jìn)行領(lǐng)域?qū)优c展現(xiàn)層之間的溝通協(xié)調(diào)以及幫助業(yè)務(wù)對(duì)象來執(zhí)行特定的應(yīng)用服務(wù)方法,它不包含業(yè)務(wù)邏輯。用戶輸入的有效性驗(yàn)證也是在應(yīng)用層實(shí)現(xiàn)的,ABP提供了一個(gè)進(jìn)行輸入有效性驗(yàn)證的基礎(chǔ)架構(gòu),可以很容易地實(shí)現(xiàn)輸入?yún)?shù)的有效性驗(yàn)證。實(shí)體與數(shù)據(jù)傳輸對(duì)象(DTO)之間的映射也被應(yīng)用于這一層。

領(lǐng)域?qū)?Core):領(lǐng)域?qū)邮菢I(yè)務(wù)對(duì)象和業(yè)務(wù)規(guī)則的所在層,是一個(gè)應(yīng)用程序的核心層,所有業(yè)務(wù)規(guī)則都是在領(lǐng)域?qū)訉?shí)現(xiàn)的[4]。領(lǐng)域?qū)影藢?shí)體、倉儲(chǔ)、工作單元、領(lǐng)域服務(wù)(Domain Service)、領(lǐng)域事件(Domain Event)等功能的定義與實(shí)現(xiàn)。

基礎(chǔ)設(shè)施層(EntityFramework&Migratior):基礎(chǔ)設(shè)施層通過提供通用性技術(shù)來支持更高的層,在領(lǐng)域?qū)又卸x的倉儲(chǔ)接口都應(yīng)該在基礎(chǔ)設(shè)施層中實(shí)現(xiàn)?;A(chǔ)設(shè)施層的倉儲(chǔ)可以通過ORM實(shí)現(xiàn)與數(shù)據(jù)庫的交互[5]。數(shù)據(jù)庫遷移(DB Migrations)也被用于這一層。

WEB與展現(xiàn)層(WEB&WEBApi):WEB與展現(xiàn)層用來提供用戶界面以及實(shí)現(xiàn)用戶交互操作。WEB與展現(xiàn)層使用ASP.NET MVC、WEB API等組件來實(shí)現(xiàn)。ABP提供了分別針對(duì)單頁面應(yīng)用程序(SPA)和多頁面應(yīng)用程序(MPA)的展現(xiàn)層架構(gòu),以適應(yīng)不同的應(yīng)用場(chǎng)景,如一個(gè)管理后臺(tái)適合用SPA,而博客就更適合用MPA,因?yàn)檫@樣更利于被搜索引擎抓取。

1.3 ABP在項(xiàng)目中的配置

ABP開發(fā)框架具有良好的易用性和配置簡(jiǎn)單等特點(diǎn)。在ABP官方網(wǎng)站下載相應(yīng)功能的源碼包(以ASP.NET MVC 5.X +SPA項(xiàng)目包為例),解壓后使用Visual Studio 2017打開項(xiàng)目文件夾中的*.sln解決方案文件,可看到解決方案目錄結(jié)構(gòu)。

目錄結(jié)構(gòu)如圖1所示。

圖1 ABP解決方案項(xiàng)目結(jié)構(gòu)

在運(yùn)行模版項(xiàng)目之前,首先需要對(duì)整個(gè)解決方案進(jìn)行還原NuGet包的操作,以加載一些項(xiàng)目必須的支持插件。其次需要配置數(shù)據(jù)庫連接,在WEB項(xiàng)目下的WEB.config內(nèi)可修改配置文件中的數(shù)據(jù)庫連接字符串,最后打開程序包管理器控制臺(tái)(工具目錄下,NuGet包管理器菜單項(xiàng)中),選擇EntityFramework項(xiàng)目,執(zhí)行Update-Database命令創(chuàng)建數(shù)據(jù)庫及表。至此,一個(gè)簡(jiǎn)單的ABP項(xiàng)目就配置完成了。最后只需要設(shè)置WEB項(xiàng)目為啟動(dòng)項(xiàng)目,模版項(xiàng)目即可成功運(yùn)行。

ABP框架是一個(gè)高度模塊化的開發(fā)框架,提供了創(chuàng)建和組裝模塊的基礎(chǔ)以及模塊基本的啟動(dòng)配置和方法。一個(gè)模塊能夠依賴于另一個(gè)模塊,ABP框架會(huì)自動(dòng)解析模塊之間的依賴關(guān)系。ABP通過調(diào)用基類模塊—Module模塊的一些指定方法來進(jìn)行啟動(dòng)和關(guān)閉模塊的操作。和.NET框架原生的啟動(dòng)配置模塊相比,ABP框架的模塊可以通過IAbpModuleConfigurations接口進(jìn)行個(gè)性化的擴(kuò)展,這樣使得模塊的配置、啟動(dòng)更加簡(jiǎn)單、方便。

2 ABP框架在工會(huì)經(jīng)費(fèi)稅務(wù)代收數(shù)據(jù)共享平臺(tái)的應(yīng)用

2.1 工會(huì)經(jīng)費(fèi)稅務(wù)代收數(shù)據(jù)共享平臺(tái)

工會(huì)經(jīng)費(fèi)管理在以往實(shí)施過程中存在收繳級(jí)次、比例、金額誤差等問題,給工會(huì)經(jīng)費(fèi)稅務(wù)代收工作帶來了一定的影響[6]。為進(jìn)一步完善工會(huì)經(jīng)費(fèi)稅務(wù)代收工作,引進(jìn)了工會(huì)經(jīng)費(fèi)稅務(wù)代收數(shù)據(jù)共享平臺(tái)。

工會(huì)經(jīng)費(fèi)稅務(wù)代收數(shù)據(jù)共享平臺(tái)需要實(shí)現(xiàn)“經(jīng)費(fèi)收繳核對(duì)”、“經(jīng)費(fèi)稽核比對(duì)”、“經(jīng)費(fèi)劃撥跟蹤”、“經(jīng)費(fèi)綜合查詢”四個(gè)目標(biāo),如圖2所示,旨在建立工會(huì)和地稅數(shù)據(jù)之間的數(shù)據(jù)訪問,對(duì)全省工會(huì)經(jīng)費(fèi)稽核、收繳、撥付、管理全生命周期進(jìn)行集中化統(tǒng)一管理。突出流程化、規(guī)范化、智能化原則[7],提升工會(huì)經(jīng)費(fèi)稅務(wù)管理工作水平[8]。

圖2 工會(huì)經(jīng)費(fèi)稅務(wù)代收數(shù)據(jù)共享平臺(tái)目標(biāo)

2.2 ABP框架在工會(huì)經(jīng)費(fèi)稅務(wù)代收數(shù)據(jù)共享平臺(tái)中的應(yīng)用分析

平臺(tái)主要由平臺(tái)數(shù)據(jù)庫、基礎(chǔ)數(shù)據(jù)管理、統(tǒng)一身份認(rèn)證、經(jīng)費(fèi)綜合管理、開票管理、分析中心、溝通交流中心、微信公眾號(hào)、權(quán)限管理、稅務(wù)交互等部分組成。

數(shù)據(jù)庫的設(shè)計(jì)在項(xiàng)目開發(fā)中一直是一項(xiàng)龐大且耗時(shí)耗力的工程[9],使用ABP框架后可大大縮減該過程。以平臺(tái)數(shù)據(jù)庫構(gòu)建為例,圖3左半部分為ABP框架自動(dòng)生成的數(shù)據(jù)庫實(shí)體列表,包含了遷移日志、審計(jì)日志、通知、權(quán)限管理、角色、用戶、消息、用戶關(guān)系等數(shù)據(jù)庫實(shí)體,圖3右半部分為開發(fā)人員根據(jù)系統(tǒng)具體需求新增的數(shù)據(jù)庫實(shí)體。傳統(tǒng)開發(fā)模式下,需要完全設(shè)計(jì)出圖3的實(shí)體結(jié)構(gòu),而在使用ABP框架后,工作量減少了幾乎一半之多。ABP采用了微軟的一個(gè)重型ORM(對(duì)象關(guān)系映射)框架—EF(Entity Framework)框架,可以允許用戶以DB First(數(shù)據(jù)庫優(yōu)先)的設(shè)計(jì)模式來設(shè)計(jì)數(shù)據(jù)庫[10]。當(dāng)在SQL Server中初步設(shè)計(jì)好數(shù)據(jù)庫后,即可通過EF將其添加進(jìn)項(xiàng)目中,ABP會(huì)自動(dòng)生成相應(yīng)的實(shí)體類代碼。

圖3 工會(huì)經(jīng)費(fèi)稅務(wù)代收數(shù)據(jù)共享平臺(tái)數(shù)據(jù)庫表結(jié)構(gòu)

下面以基礎(chǔ)數(shù)據(jù)管理模塊下的公司信息管理類為例,簡(jiǎn)要地分析使用ABP框架編寫項(xiàng)目實(shí)現(xiàn)代碼的好處。

public class CompanyAppService:ICompanyAppService, IapplicationService{

private readonly IRepository _CompanyRepository;

public CompanyAppService(IRepository CompanyRepository){_CompanyRepository=CompanyRepository;}

[AbpAuthorize(FpPermissions.Companies_Edit)]

public async Task UpdateCompany(UpdateCompanyInput input){

Logger.Info("Updating a Company for input:"+input);

var Company=await _CompanyRepository.GetAsync(input.Id.Value);

if(Company==null){

throw newUserFriendlyException(L("NotCompanyMessage"));}

input.MapTo(Company);

await_CompanyRepository.UpdateAsync(Company);}}

以上代碼是一個(gè)經(jīng)過簡(jiǎn)化的應(yīng)用服務(wù)方法(工作單元),該服務(wù)通過繼承IApplicationService(WEB Api)接口,使得UpdateCompany方法可以在客戶端通過Ajax方法來調(diào)用。IRepository為ABP中的倉儲(chǔ)類接口,通過該定義,無須設(shè)置連接數(shù)據(jù)庫,ABP自動(dòng)創(chuàng)建一個(gè)數(shù)據(jù)庫連接來連接Company實(shí)體,使得后面的更新操作可以對(duì)數(shù)據(jù)庫的數(shù)據(jù)進(jìn)行修改。[AbpAuthorize(…)]標(biāo)簽可以檢測(cè)當(dāng)前操作用戶是否具有更新數(shù)據(jù)的權(quán)限,如果沒有,那么將不允許其訪問UpdateCompany方法。UpdateCompanyInput是一個(gè)DTO對(duì)象,在操作實(shí)體時(shí),無需一次加載該實(shí)體的所有屬性,而是有選擇性加載,這樣可使得服務(wù)器和客戶端的通信更加順暢,同時(shí)對(duì)數(shù)據(jù)的安全性也有了一定的保障。Logger方法用來對(duì)日志進(jìn)行操作,可改變ABP使用的默認(rèn)日志組件。當(dāng)出現(xiàn)異常操作時(shí),可以通過throw方法結(jié)合L方法的方式拋出自定義本地化的異常信息來提示用戶,也可以使用ABP默認(rèn)的異常處理操作。當(dāng)方法成功完成后,數(shù)據(jù)會(huì)被異步更新至數(shù)據(jù)庫中保存,如果這期間有任何一個(gè)操作發(fā)生失敗,所有操作都會(huì)被回滾至方法開始之前,數(shù)據(jù)也不會(huì)被更新到數(shù)據(jù)庫中。在實(shí)際開發(fā)過程中,以上所有的這些操作實(shí)現(xiàn)正常情況下都是需要花費(fèi)很多時(shí)間且需要相當(dāng)數(shù)量行的代碼來完成的,但是在ABP中所有的這些操作都可以自動(dòng)完成,代碼量也大幅度減少,開發(fā)人員不需要再花費(fèi)時(shí)間、精力來編程實(shí)現(xiàn)這些功能[11],而可以把精力集中到業(yè)務(wù)實(shí)現(xiàn)上。

對(duì)于平臺(tái)的其余部分,如統(tǒng)一身份認(rèn)證部分以及權(quán)限管理部分,ABP已實(shí)現(xiàn)了該部分功能,包含了針對(duì)應(yīng)用系統(tǒng)的授權(quán)認(rèn)證接口、統(tǒng)一身份認(rèn)證接口以及角色訪問控制權(quán)限的管理,開發(fā)人員只需要以其特定規(guī)則調(diào)用該部分功能,無須重復(fù)開發(fā)。ABP內(nèi)置多租戶、郵件、實(shí)時(shí)服務(wù)SignalR,可方便實(shí)現(xiàn)溝通交流中心部分的功能。而對(duì)于分析中心和應(yīng)用工作流的審批流程來講,ABP可以通過加裝大量的圖表類插件以及工作流插件來實(shí)現(xiàn),ABP框架良好的擴(kuò)展性為該部分的實(shí)現(xiàn)奠定了基礎(chǔ)。

由此可見,ABP框架可完全應(yīng)用在工會(huì)經(jīng)費(fèi)稅務(wù)代收數(shù)據(jù)共享平臺(tái)的開發(fā)過程中,在其原有的基礎(chǔ)上開發(fā)系統(tǒng),可減少開發(fā)難度,提升系統(tǒng)開發(fā)效率。

2.3 工會(huì)經(jīng)費(fèi)稅務(wù)代收數(shù)據(jù)共享平臺(tái)架構(gòu)設(shè)計(jì)

開發(fā)一個(gè)系統(tǒng)時(shí)不可避免地要使用各種框架,如ORM、ASP.NET MVC、WEB API、IOC以及日志等[12]。把上述這些組件組合到一起時(shí),其復(fù)雜度會(huì)急劇上升。因此,希望在編程時(shí),不用過多考慮基礎(chǔ)軟件結(jié)構(gòu)上的種種問題,而把大部分的注意力集中到業(yè)務(wù)實(shí)現(xiàn)上。ABP框架的出現(xiàn)解決了這個(gè)問題,用戶無須再為項(xiàng)目的整體架構(gòu)設(shè)計(jì)煩心,業(yè)界頂尖的架構(gòu)師已經(jīng)搭建好了一套完整的基礎(chǔ)架構(gòu)。ABP擁有完整的使用手冊(cè),降低了框架的使用門檻,提高了系統(tǒng)的開發(fā)效率。圖4是工會(huì)經(jīng)費(fèi)稅務(wù)代收數(shù)據(jù)共享平臺(tái)在使用ABP框架后的軟件架構(gòu)。

圖4 工會(huì)經(jīng)費(fèi)稅務(wù)代收數(shù)據(jù)共享平臺(tái)軟件架構(gòu)

平臺(tái)依托于ABP框架來開發(fā)系統(tǒng),以DDD的經(jīng)典分層架構(gòu)思想來設(shè)計(jì)系統(tǒng)的整體軟件架構(gòu)[13],將系統(tǒng)各個(gè)組件高度模塊化,以降低系統(tǒng)各個(gè)組件之間的耦合度,使得系統(tǒng)組件之間達(dá)到了松耦合[14],可擴(kuò)展性、可維護(hù)性大大提升??梢允褂肁BP內(nèi)置的EF框架來實(shí)現(xiàn)對(duì)象關(guān)系映射(ORM),也可以更換為Nhibernate框架來實(shí)現(xiàn)相同的功能;可以使用AngularJS來開發(fā)前端用戶界面[15],也可以使用Bootstrap、EXT JS或者JQuerry來開發(fā)前端用戶界面。所有這些都是可更換的,配置起來相當(dāng)簡(jiǎn)單,不會(huì)影響到系統(tǒng)其他組件的功能[16]。ABP框架的高擴(kuò)展性和易維護(hù)性可以使得開發(fā)人員任意更換其內(nèi)置組件為更優(yōu)版本。

3 結(jié)束語

ABP框架的出現(xiàn),使得公司可以縮減項(xiàng)目開發(fā)成本,開發(fā)人員可以把更多的注意力集中到業(yè)務(wù)實(shí)現(xiàn)上,專注于開發(fā)系統(tǒng)功能。由于工會(huì)經(jīng)費(fèi)稅務(wù)代收數(shù)據(jù)管理平臺(tái)功能繁多,結(jié)構(gòu)復(fù)雜,在其中引入ABP開發(fā)框架,可大幅降低項(xiàng)目開發(fā)難度和成本,值得在WEB項(xiàng)目開發(fā)中借鑒、推廣。

猜你喜歡
開發(fā)人員日志稅務(wù)
稅務(wù)動(dòng)態(tài)
一名老黨員的工作日志
個(gè)人獨(dú)資企業(yè)對(duì)外投資的稅務(wù)與會(huì)計(jì)處理
論投資性房地產(chǎn)的會(huì)計(jì)核算及稅務(wù)處理
提升稅務(wù)干部的學(xué)習(xí)力
扶貧日志
心聲歌刊(2020年4期)2020-09-07 06:37:14
Semtech發(fā)布LoRa Basics 以加速物聯(lián)網(wǎng)應(yīng)用
游學(xué)日志
讓W(xué)indows 10進(jìn)入開發(fā)者模式
電腦迷(2015年12期)2015-04-29 23:22:51
后悔了?教你隱藏開發(fā)人員選項(xiàng)
電腦愛好者(2015年6期)2015-04-03 01:20:56
治多县| 建平县| 永顺县| 寿宁县| 扬州市| 昭觉县| 中方县| 镇坪县| 新巴尔虎右旗| 探索| 克山县| 沧州市| 马山县| 易门县| 屯昌县| 犍为县| 澄城县| 资源县| 黄梅县| 兰考县| 盐亭县| 新泰市| 大港区| 榕江县| 北宁市| 大关县| 舒城县| 丰宁| 鲁甸县| 浑源县| 江西省| 新龙县| 库车县| 维西| 江都市| 西华县| 资源县| 巴南区| 揭阳市| 广德县| 新巴尔虎左旗|