開源:Sagit.Framework For IOS 開發框架

来源:http://www.cnblogs.com/cyq1162/archive/2017/12/13/8029864.html
-Advertisement-
Play Games

.NET的框架造多了,今天就為IOS造一個了,本文介紹Sagit框架的起緣故事及簡介... ...


一:創造Sagit開發框架的起因:

記得IT連創業剛進行時,招了個IOS的女生做開發,然後:

----------女生的事故就此開始了-----------

1:面試時候:有作品,態度也不錯,感覺應該能做點事。

2:剛招進來:發現每天都在看文章,但遲遲不見有點東西。

3:過程問答:現在在整些什麼?回答在搭框架。

4:發現危機:不小心看到她用單手指敲鍵盤,感覺不妙。

5:處理危機:速學IOS,一個星期後,看完她代碼,談話Over!

----------女生的事故就到此結束了----------

在速學IOS時,快速掃了不少培訓的視頻教程,發現套路都是很原始。

這些原始的套路瞭解可以,但若這些過來搬到項目來,就禍害無窮了。

按照當時創業的成本考慮,很大概率招來的人是以下三種:

1: 剛從培訓班出來的;

2:剛看完培訓視頻過來;

3:剛用培訓視頻的套路禍害完一個項目後跳過來的。

為了對下一個開發人員有所約束:

讓一個有3-4年開發經驗的朋友幫忙整一下框架。

看完他整的框架,發現只是常規性的工具類分文件夾。

給他提了一個要求,把其中一個網路請求重新封裝一下。

回頭再看,雖有所改進,但還是不盡我意。

也許可以指導繼續改進,但時不以我,也不以他。

於是自己動手了:框架大體完成60%時,招了個男開發人員。

----------男生的事故就此開始了-----------

為了趕項目,讓新人在框架的基礎上動工了。

鑒於新人開發人員能弄點東西,加上有框架的輔助,就撒手了。

由於框架的不完善,以及對框架的不理解,遇到點小坑就吐槽。

吐槽多了,也只能同意他混著其它的框架一起整了。

再後來,多的數不清的坑和閃退事故。

早期關註IT連及用IT連App的童學,就清楚了。

或者在我之前的IT連創業系列文章里應該可以感知了。

現在,他也Over了!

----------男生的事故就到此結束了-----------

重新接手回IOS後,發現代碼邏輯也是一團槽,好在之前有一部份還是按框架走。

最近花了一周多的時候,理解,並開始重構整個項目的代碼。

同時對框架之前已有的依賴關係也進行了抽離,並重新重構了一下框架。

目前對框架的重構的工作已經進行了70%-80%,還有一些功能想了還沒加上。

但整體並不影響基礎功能,所以是時候把Sagit的框架和大伙分享了!

二:關於框架起名:

自從:CYQ.Data 框架這名字被大伙吐槽之後,後續的框架命名,就顯的格外用心了。

在研究了行星、星座、水果、植物、動物、顏色、形狀等英文名稱之後。

終於有了:白羊(Areis.DevFramework For DotNet)、

再也有了:金牛(Taurus.MVC For DotNet)

之後沒了:雙子(Gemini.workflow For DotNet) 工作流引擎目前難產中(寫了開頭,後來沒空折騰)。

因此,湊齊黃金十二宮,召換雅典娜,就成了我來地球最神秘的任務了!

這次越級選了:Sagittarius (射手)

一來是ST的首碼簡寫剛好對應的現在創業公司的名字:隨天。

二來取前半部做框架名,簡寫:Sagit(發音:射日,很和諧發現有木有)

三:框架的適用場景:

1:研究學習:

A:工作幾年之後,開發功能已不是問題,需要有點新思維來突破受限的瓶頸。

看懂框架代碼不難,主要是學習思維,多思考,並多訓練自己怎麼寫。

B:對於在培訓行業的教師,可以在培訓結束前用框架的思維引導一下新人,再放他們出來。

2:項目開發:

A:開發人員沒有框架的概念。

B:目前沒有其它可選擇的框架。

一般的說,除了游戲,其它常規性的項目都適合。 

 

下麵對框架進行簡單的介紹,也只能是簡單介紹:

Sagit 創新一:簡潔的相對佈局語法

1:統一標準參數,自適配手機屏幕,實現AutoLayout。

A:框架預設以IPhone6的像素為標準參考體系:750*1334。

B:開發時,都以標準的像素單位為參數。

C:運行時,會自動適配成對應比例的參數。

(PS :如果需要修改標準,可在STDefineUI.h文件中修改定義)

看著UI給的參數標註圖,輕鬆佈局:

2: 簡潔的相對佈局語法,一行看盡

以上圖片為例,做佈局

A:相對父元素的佈局 Logo:

[[[[self addImageView:@"login_logo"] width:170 height:170] relate:Top v:288] toCenter:X];

B:相對固定元素的佈局,下麵這行代碼是引用其它地方的:

[[[[self addImageView:@"icon_verify"] width:48 height:48] onBottom:pwdIcon y:26] toCenter:X];

3:可局部刷新的佈局

以下這行代碼,會對批定的視圖的子視圖重新進一次相對佈局。

[self refleshLayout];

 

Sagit 創新二:徹底分離的View與Controller

記得很早以前,我寫過一篇文章:Objective-C iOS純代碼佈局 一堆代碼可以放這裡!

那時候只是研究的前奏,並沒有實現完整分離,當然現在是解決了。

舉個例如:一個文本框一個按鈕,點擊按鈕彈出文字框的內容。

之前的做法,你都會在Controller里寫一堆UI相關的創建方法,或者需要將某些UI定義為全局變數,以便後續再去獲取UI的值。

最差也是我之前未完成時留下的那點手尾:(下麵紅色的,在Controller中需要定義一個具體的LoginView變數)

好了,現在這個問題已經被我徹底解決了,0入侵已經成為了事實,下麵看示例代碼:

LoginView 的代碼:創建了一個文本框和一個點擊按鈕

@interface LoginView : STView //這是LoginView.h

@end

@implementation LoginView    //這是LoginView.m

-(void)initUI
{
    [[self addTextField:@"userName" placeholder:@"輸入手機號"] x:0 y:0 width:100 height:100];
    [[self addButton:@"btnLogin" title:@"登錄"] onRight:self.lastSubView.PreView x:10];
}
@end

LoginController 的代碼:有一個按鈕事件,獲取手機號用戶名然後彈出來提示

@interface LoginController : STController // 這是LoginController.h

@end

@implementation LoginController            //這是LoginController.m

-(void)btnLoginClick
{
    NSString* userName=[self uiValue:@"userName"];
    [self.box prompt:userName];
}

調用:

self.window.rootViewController = [LoginController new];

效果:(為了截圖,特意新建了個demo...)

解析:

LoginView和LoginController兩個文件代碼里,並沒有互相引用的地方。

但是UI和事件卻補神奇的關聯起來了,這是怎麼做到的呢?

秘密就在STView和STController文件的源碼中。

Sagit 創新三:表單的自動提交與回顯

如果你需要提交一個表單的數據,你只需要這樣:

-(void)btnLoginClick
{
//    NSString* userName=[self uiValue:@"userName"];
//    [self.box prompt:userName];
    
    [self.http post:@"/Login" paras:self.formData success:^(STModel *result) {
        if(result.success)//如果:提交成功
        {
            [self.stView loadData:result.msg];//將返回的數據回顯到控制項
        }
    }];
}

解析:

self.formData可以自動收集UI表單的內容。

self.stView loadData 可以自動將字典的數據寫回UI中。

一切就是這麼Easy,在這種常規的提交中,批量來批量去,不需要有Model的存在。

這裡暫就不提供Demo了,後續文章再跟進。

Sagit 其它功能一:月下無限連的屬性語法:

    UITextField *userName= [[[self addTextField:@"UserName" placeholder:@"手機號碼"] width:372 height:68] onRight:mobileIcon x:30 y:-10];
    [[userName maxLength:11] keyboardType:UIKeyboardTypeNumberPad];

 不用再去這樣寫的憔碎了:

 mobileTF.keyboardType                = UIKeyboardTypeNumberPad;// UIKeyboardTypeNamePhonePad;
 mobileTF.MaxLength=11;//                    = (id)self.Controller;

Sagit 其它功能二:封裝了適合C#玩家的簡潔語法

OC的命名總是很長,做為了一名C#的大神,有義務把C#簡潔的語法帶過來。

例如:

@interface NSString(ST)

-(NSString*)reverse;
-(BOOL)isInt;
-(BOOL)isFloat;
-(NSString*)append:(NSString*)string;
-(NSString*)replace:(NSString*)a with:(NSString*)b;
-(NSString *)replace:(NSString *)a with:(NSString *)b isCase:(BOOL)isCase;
-(NSArray<NSString*>*)split:(NSString*)separator;
-(NSString*)toUpper;
-(NSString*)toLower;
-(BOOL)startWith:(NSString*)value;
-(BOOL)endWith:(NSString*)value;
-(BOOL)contains:(NSString*)value;
-(BOOL)contains:(NSString*)value isCase:(BOOL)isCase;
-(BOOL)isEmpty;
+(BOOL)isNilOrEmpty:(NSString*)value;
+(NSString*)toString:(id)value;
-(NSString*)trim;

Sagit 其它功能...

1:網路的請求只有三個:

[self.http get ...]
[self.http post ...]
[self.http upload ...]

2:消息提示框:

[self.box prompt...]
[self.box alert..]
[self.box confirm...]

其它等。。。就不在這裡介紹了,後續會慢慢寫文介紹。

Sagit 開源地址:

GitHub:https://github.com/cyq1162/Sagit

目前以源碼方式提供,並未打包成類庫。

兩個原因:

一是還需要地方需要繼續完善升級;

二來方便有興趣的同學一起完善。

總結:

1 :框架剛開源,預示著在未來的日子里,升級與變動是少不了的。

2:框架只是個基礎,完整的項目架構,還需要根據不同的業務搭配不同的第三方類庫。

3:後續會將IT連和IT戀兩個App的源碼,做為示例教程,和大伙分享。

4:最後,依然感謝大伙關註我正在進行的IT連創業項目!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 鑒於有些電腦安裝wampsever出現的幾種問題 [1] 2.2版本問題 這裡埠配置正確,本地伺服器沒有開啟(也就是iis這邊沒有問題) 還是出現這種情況 也就是Apache service 和 PHP service可以使用但是就是差一個服務 那麼就剩下資料庫service了(MySQL) 這裡 ...
  • --首先創建資料庫TESTCREATE DATABASE TEST--創建表tb_userUSE TESTCREATE TABLE [tb_user]([name] [nvarchar] (50) NOT NULL,[age] [int] NOT NULL,[sex] [nvarchar] (4)) ...
  • MSSQL資料庫伺服器上有很多類似的資料庫,需要將這些資料庫統一修改其中的某些表或者某些命令,那麼就會想到用游標來遍歷。 先來說思路: 1,首先需要查詢出所有的資料庫; select [name] from [master].[dbo].[sysdatabases] order by [name]; ...
  • Oracle 資料庫簡單同步 前提: 方式: 步驟: 下載文件:backscript.rar ...
  • 閱讀目錄 一:觸發器的優點 二:觸發器的作用 三:觸發器的分類 四:觸發器的工作原理 五:創建觸發器 六:管理觸發器 概念: 觸發器(trigger)是SQL server 提供給程式員和數據分析員來保證數據完整性的一種方法,它是與表事件相關的特殊的存儲過程,它的執行不是由程式調用,也不是手工啟動, ...
  • 訪問mysql網址:https://dev.mysql.com/ 下麵需要登錄你的oracle賬號進行下載就好~ 下載之後是一解壓包形式存在的~ 解壓之後的文件 這裡我新建了my.ini的文件~將my-default.ini文件的內容複製進去 第一個等號後面為mysql的路徑 第二個等號為mysql ...
  • AI人工智慧,大數據,Database,Linear Algebra,Python,機器學習,Hadoop 資料、乾貨、下載、書籍 ...
  • 經過前兩篇破解教程,想必大家也是明白了破解的簡單流程了。 先對APP進行試用,瞭解APP運行的大概流程,之後從APP中找出關鍵字(一般的關鍵字差不多都是支付失敗),之後使用Androidkiller進行反編譯,對關鍵字或者關鍵字的Unicode進行搜索,之後,從搜索的結果中找出關鍵的smail文件, ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...