ABP學習資源整理

??不同的編程語言都有構建Web Application的框架,比如C#中的ASP.NET Core和ABP,Java中的Spring Boot和Spring Cloud,Python中的Django和Flask,Node.js中的Express和Koa2,Go中的Beego和Gin等。今天要介紹的主角是ABP框架,以前叫做ASP.NET Boilerplate,現在叫做ABP vNext,簡稱為ABP框架。ABP可以提供了構建現代Web Application的完整架構和強大的基礎設施,遵循DDD最佳實踐和約定。特別是完整的模塊化系統,能夠開發可重復使用的應用程序模塊,這一點對于軟件工程領域來說是非常重要的。總之,ABP是一個非常具有前瞻性的優秀框架。

一.ABP框架概述

在.NET領域中,通常使用ASP.NET Core來寫后端的Web API,ABP對其進行了無縫增強。在群里討論,用一位群友的話來說就是:ABP像變形金剛一樣,可以在單體和微服務項目之間切換;領域驅動設計[DDD]可以用的很重,也可以用的輕。根據項目情況,如果初期項目并不復雜,可以使用單體架構,隨著項目演化變的復雜了,也可以很容易的轉換為微服務架構,而DDD是復雜業務拆分的理論依據。簡單理解,微服務是從技術的視角來看拆分問題,而DDD是從業務視角來看拆分問題。從而解決項目的可維護和三高問題[高并發|高性能|高可用]。

1.ABP架構

(1)微服務兼容
核心框架和預構建模塊在設計時就考慮了微服務架構,因為很容易的在單體和微服務架構間轉換。
(2)模塊化架構
提供了完整的模塊化系統,能夠開發可重復使用的應用程序模塊。
(3)領域驅動設計
實現基于DDD的分層架構并構建可維護的代碼庫,幫助開發基于DDD模式和準則的應用程序。
(4)多租戶/Saas
提供了開箱即用的多租戶模塊,對于構建SaaS應用非常的方便。

2.ABP基礎設施

(1)認證與授權
集成了ASP.NET Core Identity和IdentityServer4豐富的身份驗證和授權選項,提供可擴展且詳細的權限系統。
(2)橫切關注點
Don't Repeat Yourself,專注于業務代碼,并讓ABP按照約定自動執行。
(3)分布式事件總線
使用帶有RabbitMQ集成的內置分布式事件總線,可以輕松發布和使用分布式事件。
(4)用戶界面主題
對于前后端不分離的項目,可以參考。但是對于前后端分離的項目,不用參考。
(5)數據過濾
自動過濾來自數據庫的查詢,以輕松實現軟刪除和多租戶等模式。
(6)Bootstrap Tag Helpers和動態表單
對于前后端不分離的項目,可以參考。但是對于前后端分離的項目,不用參考。
(7)審計日志
自動跟蹤系統中的所有操作和數據更改。
(8)HTTP APIs和動態代理
自動將應用程序服務公開為REST的HTTP API,并與動態JavaScript和C#代理一起使用。

3.ABP啟動模板

各種啟動模板提供了完整配置的解決方案,可以實現快速啟動開發:
a74f0fe932142a8ff81aca91a77cf3bf.png

4.ABP CLI

對ABP解決方案執行常見操作的命令行工具,安裝和更新ABP CLI:

dotnet tool install -g Volo.Abp.Cli
dotnet tool update -g Volo.Abp.Cli

ABP CLI所有可用的命令列表:

help:展示ABP CLI的用法幫助信息
new:生成基于ABP的啟動模板
update:自動更新的ABP解決方案ABP相關的NuGet和NPM包
clean:刪除當前目錄下所有的BIN和OBJ子目錄
add-package:添加ABP包到項目
add-module:添加應用模塊到解決方案
generate-proxy:生成客戶端代理以使用HTTP API端點
remove-proxy:移除以前生成的客戶端代理
switch-to-preview:切換到ABP框架的最新預覽版本
switch-to-nightly:切換解決方案所有ABP相關包為夜間構建版本
switch-to-stable:切換解決方案所有ABP相關包為最新的穩定版本
translate:當源代碼控制存儲庫中有多個JSON[本地化]
login:使用在abp.io的用戶名和密碼在計算機上認證
login-info:展示當前登錄用戶信息
logout:在計算機注銷認證
install-libs:為MVC/Razor Pages和Blazor Server UI類型安裝NPM包

二.ABP框架功能

(1)多個UI選項
Angular,MVC,Razor Pages,Blazor。
(2)多個數據庫提供程序
EF Core,MongoDB,Dapper。其中,Dapper支持不完善,坑多,最好還是用EF Core。
(3)ABP CLI

# Create a new layered application
abp new Acme.BookStore
# Create a new layered application using MongoDB
abp new Acme.BookStore -d mongodb
# Add a new module to the solution
abp add-module Volo.Blogging

(4)模塊化
ABP中使用模塊化的方法很簡單,就是繼承自AbpModule即可:

[DependsOn(typeof(AbpEntityFrameworkCoreModule), //Depending on a framework moduletypeof(MyBusinessModule) //Depending on your own module
)]
public class MyAppModule : AbpModule
{public override void ConfigureServices(ServiceConfigurationContext context){//Configure DI and other modules...}public override void OnApplicationInitialization(ApplicationInitializationContext context){//Perform some application initialization logic...}
}

(5)多租戶
主要是將不同租戶間的數據進行隔離,ABP支持單一數據庫,或每個租戶單獨數據庫或者混合方式。
(6)Bootstrap標簽助手
使用ABP的tag helper來簡化它并利用智能感知:

<abp-card><img abp-card-image="Top" src="~/images/my-dog.png" /><abp-card-body><abp-card-title>Card title</abp-card-title><abp-card-text><p>This is a sample card component built by ABP bootstrapcard tag helper. ABP has tag helper wrappers for most ofthe bootstrap components.</p></abp-card-text><a abp-button="Primary" href="javascript:void(0)"  >Go somewhere &rarr;</a></abp-card-body>
</abp-card>

輸出結果如下所示:09c50c4876e1685e5ceb16bd52e3324e.png(7)動態表單
動態表單和tag helpers可從作為模型的C#類創建完整的表單:

查看:
<abp-dynamic-form abp-model="@Model.PersonInput" submit-button="true" />
模型:
public class PersonModel
{[HiddenInput]public Guid Id { get; set; }[Required][EmailAddress][StringLength(255)]public string Email { get; set; }[Required][StringLength(32)][DataType(DataType.Password)]public string Password { get; set; }[StringLength(255)]public string Address { get; set; }public Gender Gender { get; set; }
}

結果:48d015c77932b3658f63066696bbf159.png(8)認證與授權
主要是對ASP.NET Core Identity和IdentityServer4的繼承,基本上滿足身份驗證和授權,并且很容易擴展權限系統。
(9)橫切關注點
提供了授權、驗證、緩存、異常處理、數據庫連接和事務管理、審計日志、關聯ID跟蹤等常見的東西,可專注于業務代碼,并讓ABP按照約定自動執行即可。
(10)Bundling & Minification
ABP提供了一個簡單、動態、功能強大、模塊化的內置Bundling&Minification系統。

<abp-style-bundle name="MyGlobalBundle"><abp-style src="/libs/bootstrap/css/bootstrap.css" /><abp-style src="/libs/font-awesome/css/font-awesome.css" /><abp-style src="/libs/toastr/toastr.css" /><abp-style src="/styles/my-global-style.css" />
</abp-style-bundle>

(11)虛擬文件系統
虛擬文件系統使管理文件系統[磁盤]上不存在的文件成為可能,它主要用于將[js|css|image|cshtml...]文件嵌入到程序集中,并在運行時像物理文件一樣使用它們。
(12)主題
主題系統允許通過基于最新的Bootstrap框架定義一組通用基礎庫和布局來獨立開發應用程序和模塊主題。
(13)后臺作業
定義簡單的類以在隊列中在后臺執行作業,使用內置的作業管理器或集成自己的作業管理器。Hangfire&RabbitMQ集成已經可用:

public class EmailSendingJob : BackgroundJob<EmailSendingArgs>
{private readonly IEmailSender _emailSender;public EmailSendingJob(IEmailSender emailSender){_emailSender = emailSender;}public override void Execute(EmailSendingArgs args){_emailSender.Send(args.EmailAddress,args.Subject,args.Body);}
}

(14)DDD基礎設施
基于域驅動設計模式和準則構建分層應用程序的完整基礎設施,包括聚合根、實體、值對象、領域服務、倉儲、應用程序服務、數據傳輸對象、規范等:

public class BookAppService : ApplicationService, IBookAppService
{private readonly IRepository<Book, Guid> _bookRepository;public BookAppService(IRepository<Book, Guid> bookRepository){_bookRepository = bookRepository;}public async Task CreateAsync(CreateBookDto input){var book = new Book(GuidGenerator.Create(),input.Name,input.Type,input.Price);await _bookRepository.InsertAsync(book);}
}

(15)自動REST APIs
ABP可以按照約定自動將應用程序服務配置為API控制器:
ea201dd758b482b3d140fbd5546a7bc4.png(16)動態客戶端代理
從JavaScript和C#客戶端輕松使用API:

//Call remote APIs just like local functions in JavaScript
acme.bookStore.book.getList({}).done(function (result) {//...});

(17)分布式事件總線
使用帶有RabbitMQ集成的內置分布式事件總線,可以輕松發布和使用分布式事件:

發布事件:
public class PublisherDemo : ITransientDependency
{private readonly IDistributedEventBus _distributedEventBus;public PublisherDemo(IDistributedEventBus distributedEventBus){_distributedEventBus = distributedEventBus;}public async Task RunAsync(){//Publish an eventawait _distributedEventBus.PublishAsync(new StockCountChangedEvent(productId, 42));}
}
處理事件:
public class MyEventHandler: IDistributedEventHandler<StockCountChangedEvent>{public Task HandleEventAsync(StockCountChangedEvent eventData){//Handle the event and execute your business}}

(18)BLOB存儲
BLOB存儲系統提供了BLOB的抽象,ABP提供了一些預構建的存儲提供程序集成[Azure|AWS|文件系統|數據庫等],可以輕松的在應用程序中使用它們:

public class MyService : ITransientDependency
{private readonly IBlobContainer _blobContainer;public MyService(IBlobContainer blobContainer){_blobContainer = blobContainer;}public async Task SaveBytesAsync(byte[] bytes){await _blobContainer.SaveAsync("my-blob", bytes);}public async Task<byte[]> GetBytesAsync(){return await _blobContainer.GetAllBytesOrNullAsync("my-blob");}
}

(19)文本模板
文本模板是基于模板和模型[數據對象]使用動態渲染內容。比如可以使用預構建的模板來創建動態的電子郵件內容:

var result = await _templateRenderer.RenderAsync("PasswordReset", //the template namenew PasswordResetModel{Name = "john",Link = "https://abp.io/example-link?userId=123&token=ABC"}
);

(20)測試基礎設施
框架已經考慮了單元和集成測試,提供基類使其更容易。啟動模板已預先配置用于測試:

public class MyService_Tests : AbpIntegratedTest<MyModule>
{private readonly MyService _myService;public MyService_Tests(){_myService = GetRequiredService<MyService>();}[Fact]public async Task MyService_Should_Do_It(){//Actvar result = _myService.DoIt();//Assertresult.ShouldBe(42);}
}

(21)審計日志
針對關鍵業務應用程序的內置審計日志記錄,請求、服務、方法級別的審計日志記錄以及具有屬性級別詳細信息的實體歷史記錄。
(22)對象映射
對象到對象映射抽象AutoMapper集成:

public class PersonService{//Inject IObjectMapperprivate readonly IObjectMapper _objectMapper;public PersonService(IObjectMapper objectMapper){_objectMapper = objectMapper;}public PersonDto GetPerson(Guid id){Person person = GetPersonEntityFromRepository(id);//Use for Entity to DTO mappingreturn _objectMapper.Map<Person, PersonDto>(person);}}

(23)電子郵件和短信抽象
IEmailSender和ISmsSender抽象使應用程序邏輯與基礎設施解耦。先進的電子郵件模板系統允許創建和本地化電子郵件模板,并在需要時輕松使用:

public async Task SendWelcomeEmailAsync(string emailAddress, string name)
{//Get the email templatevar template = await _emailTemplateProvider.GetAsync("WelcomeEmailTemplate");//Replace placeholderstemplate.Replace("name", name);//Send emailawait _emailSender.SendAsync(emailAddress,"Welcome to our application!",template.Content);
}

(24)本土化
本地化系統允許在純JSON文件中創建資源,并使用它們來本地化UI。它支持繼承、擴展和JavaScript集成等高級方案,同時與AspNetCore的本地化系統完全兼容:

{"culture": "en","texts": {"WelcomeMessage": "Welcome to the application!","HelloWorld":  "Hello World"}
}

(25)設置管理
定義應用程序的設置,并根據當前配置,租戶和用戶在運行時獲取值。
(26)擴展方法
標準類型的擴展方法和助手使代碼更加清晰和易于編寫:

//Convert a string to camelCase
"HelloWorld".ToCamelCase(); //returns "helloWorld"//Truncate a string with "..." postfix
"This is a test string".TruncateWithPostfix(12); //returns "This is a..."//Convert a string to int
"42".To<int>(); //returns 42 as int//Check if a value occurs in a list
5.IsIn(1, 3, 5, 7); //returns true//Check if a value is between a range
5.IsBetween(6, 12); //returns false

(27)面向切面的編程
提供合適的基礎設施來創建動態代理并實現面向切面的編程,攔截任何類,并在每次方法執行之前和之后執行代碼:

//Inherit from the AbpInterceptor to log all method executions
public class MyLoggingInterceptor : AbpInterceptor, ITransientDependency
{private readonly ILogger<MyLoggingInterceptor> _logger;public MyLoggingInterceptor(ILogger<MyLoggingInterceptor> logger){_logger = logger;}public async override Task InterceptAsync(IAbpMethodInvocation invocation){LogInvocation(invocation);await invocation.ProceedAsync();}private void LogInvocation(IAbpMethodInvocation invocation){/* Access to all the information about the method execution* including method, class and provided arguments */_logger.LogInformation("Executing the method: " +invocation.Method.Name +" of class " +invocation.TargetObject.GetType().FullName);}
}

(28)依賴注入
無需手動注冊類以進行依賴項注入,按照約定自動注冊常用服務類型。對于其它類型的服務,可以使用接口和屬性來使其變得更方便:

/* Automatically registers MyService as transient.* Then you can inject by IMyService or MyService.*/
public class MyService : IMyService, ITransientDependency
{
}

(29)數據過濾
定義和使用數據過濾器,這些過濾器在從數據庫中查詢實體時會自動應用。當實現簡單的接口時,可立即使用軟刪除功能和多租戶過濾器:

public class MyEntity : Entity<Guid>, ISoftDelete
{public bool IsDeleted { get; set; }
}

三.ABP項目工程

只是介紹3種項目類型的結果,具體代碼另寫一篇文章介紹:

1.項目類型-應用程序[分層]

cf11791582eec6c868cc1390e308e0ac.png

2.項目類型-應用程序[單層]

以前是沒有單層項目的,可能大家在構建中小型Web Application時發現使用分層的應用程序還是太重量級了,官方后來就添加了單層項目:ce32f2ba156c81ca20e5424dee9af731.png

3.項目類型-模塊

822057f2922e3746ec5a512c4b931cc6.png查了下ABP官網,推測AbpModule.Web.Unified項目是AbpModule.HttpApi.Host和AbpModule.Web.Host的結合體:ad331077ae894f4c18f4fb215a823784.png

四.ABP項目資料

1.ABP官方文檔

由于ABP發展速度,因此資料很少,網上找的資料基本上過時了。ABP官方文檔應該是最新的、最全的學習資料了:87cbebaee06b5ce201ce3308a3fcffb2.png

2.ABP GitHub

通過ABP GitHub可以研究框架模塊和應用程序模塊的具體實現原理。框架模塊:這些是框架的核心模塊,像緩存、郵件、主題、安全性、序列化、驗證、Ef Core集成、MongoDB集成等等,它們沒有應用程序/業務功能,但通過提供通用基礎架構,集成和抽象會使日常開發更加容易。應用程序模塊:這些模塊是實現特定的應用程序/業務功能,像博客、文檔管理、身份管理、租戶管理等等,它是通常有自己的實體、服務、API和UI組件。開源的應用程序模塊如下所示:(1)Audit Logging:用于將審計日志持久化到數據庫
(2)Background Jobs:用于在使用默認后臺作業管理器時保存后臺作業
(3)Blogging:用于創建精美的博客,ABP的博客就使用了此模塊
(4)Docs:用于創建技術文檔頁面,ABP的文檔就使用了此模塊
(5)Feature Management:用于保存和管理功能
(6)Identity:基于Microsoft Identity管理組織單元、角色、用戶和它們的權限
(7)Identity Server:集成了IdentityServer4
(8)Permission Management:用于保存權限
(9)Setting Management:用于保存設置
(10)Tenant Management:管理多租戶應用程序的租戶
(11)Users:抽象用戶,因此其它模塊可以依賴此模塊而不是Identity模塊
(12)Virtual File Explorer:提供簡單的UI查看虛擬文件系統中的文件
cf526ca8f2f1f5e3fe6bd52318b4271e.png

3.EasyAbp GitHub

尤其值得一提的是AbpHelper.GUI和 AbpHelper.CLI這2個項目,相當于是ABP Suite。作為低代碼工具,如果使用得當可以提交開發效率。c243786a7603977fe65a83d231901a66.png另外要介紹的是awesome-abp倉儲,這里面應該是目前最全的ABP學習資料了:bfdcfa33f6d4cd291ca6bfa424238c98.png

4.ABP書籍

目前(1)既有英文版還有中文版,但是(2)只有英文版。下載方式詳見文檔底部
(1)《Implementing Domain Driven Design》
(2)《Mastering ABP Framework》
f9627450ff45ef4d1bdbd7986d619979.png

五.ABP商業版本

ABP商業版預建應用程序模塊、高級啟動模板、快速應用程序開發工具、專業UI主題和高級支持等。其中,預建應用程序模塊包括Account、Audit Logging、Identity、Identity Server UI、Language Management、SaaS、Lepton Theme、Payment、Text Template Management、Chat、File Management、CMS Kit、Forms、GDPR、Twilio SMS、Blogging、Docs等。初次之外,值得一提的是ABP Suite,相當于是一個低代碼工具,可以加速CRUD開發。

1.首頁

869b7f61878ab6753d4d8aff1636558f.png

2.儀表板

f9998d18d6dcafd376c5f53eff131f06.png

3.文件管理

b388fdded04952fe9efd1949d9969f58.png

4.SaaS

4.1租戶

331c314bcef9567a42297d03ef811c45.png

4.2版本

2a4c7d5ffc692fa1d533aa06c13c955b.png

5.管理

5.1身份標識管理

(1)組織機構
866bb4f18bd0456bbadb9fbfba100a08.png(2)角色6c454ef9be192381231b5a716ec30da7.png(3)用戶70873d5e835120383e435208483adeaa.png(4)聲明類型b7a16f1f439fa64954c6f7d29651d405.png(5)安全日志6e147e3d778e903b56636f97a8d45534.png

5.2Identity Server

(1)客戶端93f3499ed4c285bf6f8d99acaeba382c.png(2)Identity資源52e592592798ed11c7cf754273929eec.png(3)Api資源8aff6ed94f54f35cb76191048094ea4f.png(4)Api Scope026aa3bc0fd1875e175885986144510e.png

5.3語言管理

(1)語言[官網打不開]
(2)語言文本[官網打不開]

5.4文本模板

cc856a2e5f3eb00bc6fca3d46d22263f.png

5.5審計日志

33342b1c51d68e5fd0343dc09c5e5ede.png

5.6設置

(1)身份標識管理8a2dc2117969dbcbb287c6cf605b03d8.png(2)Lepton主題c5e946e7e95f0076793bc2f58791d7d6.png(3)賬戶-通用c1e9ed3433bcf204db3f99018fa1ed2e.png(4)賬戶-雙因素16ae7d304ad229c7f4fcaaf21b6b09f2.png(5)賬戶-驗證碼cf4fca04666452e151863cace81e3472.png

除了ABP官方商業版外,還有非官方的商業版,比如52ABP,感興趣可以了解下。


資料下載區

1.Implementing Domain Driven Design:公眾號后臺回復:2
2.基于ABP Framework實現領域驅動設計:公眾號后臺回復:3
3.Mastering ABP Framework:公眾號后臺回復:4
或者
1.Implementing Domain Driven Design: https://url39.ctfile.com/f/2501739-610635606-674948?p=2096(訪問密碼:2096)
2.基于ABP Framework實現領域驅動設計: https://url39.ctfile.com/f/2501739-610635608-94e753?p=2096(訪問密碼:2096)
3.Mastering ABP Framework: https://url39.ctfile.com/f/2501739-610635610-9a8f66?p=2096(訪問密碼:2096)


參考文獻:
[1]ABP官方網站:https://abp.io/
[2]Mastering ABP Framework:https://abp.io/books/mastering-abp-framework
[3]實現領域驅動設計:https://abp.io/books/implementing-domain-driven-design
[4]ABP文檔:https://docs.abp.io/zh-Hans/abp/latest/
[5]ABP社區:https://community.abp.io/
[6]ABP Commercial Documentation:https://docs.abp.io/en/commercial/latest

人工智能干貨推薦0f6ec41d02389c56218d602f74a717f1.jpeg專注于人工智能領域的技術分享

游戲元宇宙c17469a3af07df6c153d11bbe40b11c5.jpeg專注于游戲領域的技術分享

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/284285.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/284285.shtml
英文地址,請注明出處:http://en.pswp.cn/news/284285.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【ArcGIS微課1000例】0049:制圖表達(4)---自由式制圖表達

文章目錄 一、轉換為自由表達并編輯二、將效果轉換為幾何當編輯地圖時,可能會遇到一個獨特的或顯著的特征,需要專門的符號的情況,可以使用覆蓋的制圖表達來實現,但是往往不夠。可能需要簡單地繪制一個圖形以達到要求的外觀,這時可以嘗試使用自由式制圖表達。 自由式制圖表…

基于FPGA的異步FIFO設計

今天要介紹的異步FIFO&#xff0c;可以有不同的讀寫時鐘&#xff0c;即不同的時鐘域。由于異步FIFO沒有外部地址端口&#xff0c;因此內部采用讀寫指針并順序讀寫&#xff0c;即先寫進FIFO的數據先讀取&#xff08;簡稱先進先出&#xff09;。這里的讀寫指針是異步的&#xff0…

顧小清:教育信息化進入數字化轉型重要時期

身處技術加快更新、新概念頻出的時代&#xff0c;教育信息化的發展更需要堅守以人為本的初心&#xff0c;在熱點炒作的雜音中保持理智&#xff0c;避免盲目&#xff0c;抓住符合教育規律、滿足教育需求、安全有效的準繩&#xff0c;理性推進和落實。 技術在不斷發展&#xff0c…

EJB

Enterprise JavaBean,企業級javabean,是J2EE的一部分&#xff0c;定義了一個用于 開發基于組件的企業多重應用程序的標準。其特點包括網絡服務支持和核心開發工具(SDK)。 是Java的核心代碼&#xff0c;分別是會話Bean&#xff08;Session Bean&#xff09;&#xff0c;實體Be…

java 連接redis 以及基本操作

一、首先下載安裝redis 二、項目搭建 1.搭建一個maven 工程 2. 在pom.xml文件的dependencies節點下增加如下內容&#xff1a; <!-- resis --><dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version&…

WinForm(一):開始一個WinForm程序

WinForm程序只能運行在Windows上&#xff0c;即使是基于.NET5&#xff0c;6&#xff0c;7也一樣。因為WinForm的UI層對接的底層API是基于Windows的。用VisualStudio創建一個WinForm應用很簡單&#xff0c;建議使用非.NET Framework版&#xff0c;因為.NET Framework微軟漸漸不支…

【ArcGIS微課1000例】0050:Geodatabase屬性域操作全解

文章目錄 1. 屬性域的創建2. 屬性域的查看3. 屬性域的刪除與修改4. 屬性域的關聯地理數據庫按照面向對象的模型存儲地理信息,也可以將其非空間信息保存在表中。對于要素和表可以設置一些規則進行限制,對屬性的約束稱為屬性域。 屬性域是描述字段合法值的規則,是一種增強數據…

ctype.h

isalpha&#xff1a;int isalpha(char ch);檢查ch是否是字母.是字母返回非0&#xff0c;否則返回0。iscntrl&#xff1a; int iscntrl(int ch); 檢查ch是否控制字符(其ASCII碼在0和0x1F之間,數值為 0-31).是返回非0,否則返回 0.isdigit&#xff1a;int isdigit(char ch);檢查ch…

『JavaScript』核心

為什么80%的碼農都做不了架構師&#xff1f;>>> 弱類型語言 JavaScript是一種弱類型的語言。變量可以根據所賦的值改變類型。原始類型之間也可以進行類型轉換。其弱類型的物質為其帶來了極大的靈活性。 注意&#xff1a;原始類型使用值傳遞&#xff0c;復合類型使用…

優酷VIP會員周卡只需7.5元,看《沉香如屑》用優酷視頻

由楊紫、成毅主演的《沉香如屑》已上線7天。站內熱度值已經破萬&#xff0c;也拿下了4次日冠的好成績。追優酷視頻最新熱劇不能沒有優酷VIP會員啊&#xff0c;優酷的會員&#xff0c;價格算是最便宜的了&#xff0c;下面是幻海優品優酷VIP會員特價充值的價格。優酷VIP會員特價充…

Solr6.1.0Windows安裝步驟

一、 環境 solr 6.1.0 下載地址 http://archive.apache.org/dist/lucene/solr/6.1.0/ jdk 1.8 tomcat8 二、 安裝solr到tomcat 1.解壓solr&#xff0c;把 solr-6.1.0\solr-6.1.0\server 下的solr-webapp 文件夾拷貝到tomcat 的webapps下&#xff0c;重命名為solr&#xff1b;…

[轉]Autofac 框架初識與應用

一、前言 這上一篇中&#xff0c;主要講述了什么是IoC容器&#xff0c;以及了解到它是DI構造函注入的框架&#xff0c;它管理著依賴項的生命周期以及映射關系&#xff0c;同時也介紹實踐了在ASP.Net Core中,默認提供的內置IoC容器&#xff0c;以及它的實例注冊方式和相應的生命…

【ArcGIS微課1000例】0051:Geodatabase子類型操作全解

子類型是要素類中具有相同屬性的要素的子集&#xff0c;或表中具有相同屬性的對象的子集。可 通過它們對數據進行分類。 子類型是特征類(或對象類)中特征(或對象)的次級分類。例如一個公路線要素類可以根 據其字段類型的值細分為“高速公路”和“普通公路”兩個子類型。 子類…

作為Java程序員應該掌握的10項技能

本文詳細羅列了作為Java程序員應該掌握的10項技能。分享給大家供大家參考。具體如下&#xff1a; 1、語法&#xff1a;必須比較熟悉&#xff0c;在寫代碼的時候IDE的編輯器對某一行報錯應該能夠根據報錯信息知道是什么樣的語法錯誤并且知道任何修正。 2、命令&#xff1a;必須熟…

在Winform程序中設置管理員權限及為用戶組添加寫入權限

在我們一些Winform程序中&#xff0c;往往需要具有一些特殊的權限才能操作系統文件&#xff0c;我們可以設置運行程序具有管理員權限或者設置運行程序的目錄具有寫入的權限&#xff0c;如果是在操作系統里面&#xff0c;我們可以設置運行程序以管理員身份運行&#xff0c;或者設…

數據庫性能系列之索引(上)

前言上一次&#xff0c;我們從優化子查詢的角度&#xff0c;講解了一些簡單的數據庫性能優化方面的知識。通過優化子查詢的順序&#xff0c;包括合理使用IN和EXISTS&#xff0c;可以起到部分查詢的效率提升。但對于其他大多數場景&#xff0c;如單表記錄很大&#xff0c;或多表…

題目1023:EXCEL排序---------Case后面的是count,不是C

#include<stdio.h> #include<algorithm> #include<cstring> using namespace std;struct student {char num[10];char name[10];int grade; }s[100002]; int cmp1(student s1,student s2)//case 1 按照學號遞增 {return strcmp(s1.num,s2.num)<0; } int…

【ArcGIS微課1000例】0052:創建地理數據庫注記(標準注記、要素關聯注記、尺寸注記)

本文講述創建地理數據庫注記(標準注記、要素關聯注記、尺寸注記)的方法。 文章目錄 一、創建標準注記二、創建與要素關聯的注記三、創建尺寸注記一、創建標準注記 標準注記不與地理數據庫中的要素關聯。標準注記的一個例子是,地圖上標記某山脈的文字,沒有特定的要索代表該…

Lambda表達式超詳解

目錄 背景 Lambda表達式的用法 函數式接口 Lambda表達式的基本使用 語法精簡 變量捕獲 匿名內部類 匿名內部類中的變量捕獲 Lambda的變量捕獲 Lambda表達式在類集中的使用 Collection接口 List接口 Map接口 總結 背景 Lambda表達式是Java SE 8中的一個重要的新特性.…