开源:Sagit.Framework For IOS 开发框架

一:创造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:170height:170] relate:Top v:288] toCenter:X];

B:相对固定元素的布局,下面这行代码是引用其它地方的:

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

3:可局部刷新的布局

以下这行代码,会对批定的视图的子视图重新进一次相对布局。

[self refleshLayout];

Sagit 创新二:彻底分离的View与Controller

记得很早以前,我写过一篇文章:Objective-C iOS纯代码布局 一堆代码可以放这里!

那时候只是研究的前奏,并没有实现完整分离,当然现在是解决了。

举个例如:一个文本框一个按钮,点击按钮弹出文字框的内容。

之前的做法,你都会在Controller里写一堆UI相关的创建方法,或者需要将某些UI定义为全局变量,以便后续再去获取UI的值。

最差也是我之前未完成时留下的那点手尾:(下面红色的,在Controller中需要定义一个具体的LoginView变量)

好了,现在这个问题已经被我彻底解决了,0入侵已经成为了事实,下面看示例代码:

LoginView 的代码:创建了一个文本框和一个点击按钮

@interfaceLoginView : STView//这是LoginView.h@end@implementationLoginView//这是LoginView.m-(void)initUI

{

[[self addTextField:@"userName"placeholder:@"输入手机号"] x:0y:0width:100height:100];

[[self addButton:@"btnLogin"title:@"登录"] onRight:self.lastSubView.PreView x:10];

}@end

LoginController 的代码:有一个按钮事件,获取手机号用户名然后弹出来提示

@interfaceLoginController : STController// 这是LoginController.h

@end

@implementation LoginController//这是LoginController.m

-(void)btnLoginClick

{

NSString* userName=[self uiValue:@"userName"];

[self.box prompt:userName];

}

调用:

self.window.rootViewController = [LoginControllernew];

效果:(为了截图,特意新建了个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:372height:68] onRight:mobileIcon x:30y:-10];

[[userName maxLength:11] keyboardType:UIKeyboardTypeNumberPad];

不用再去这样写的憔碎了:

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

Sagit 其它功能二:封装了适合C#玩家的简洁语法

OC的命名总是很长,做为了一名C#的大神,有义务把C#简洁的语法带过来。

例如:

@interfaceNSString(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*)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.httpget...]

[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连创业项目!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,639评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,277评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,221评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,474评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,570评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,816评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,957评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,718评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,176评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,511评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,646评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,322评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,934评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,755评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,987评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,358评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,514评论 2 348

推荐阅读更多精彩内容