任務(wù)
添加患者主頁(yè)評(píng)論界面
敏捷開(kāi)發(fā)
公司最近在推行敏捷開(kāi)發(fā)屿储,新的需求按照敏捷開(kāi)發(fā)流程鹊奖,個(gè)人覺(jué)得這個(gè)工作效率會(huì)高一些店展,不同組之間員工都知道開(kāi)發(fā)的任務(wù)進(jìn)度养篓,協(xié)調(diào)起來(lái)比較方便,但是也有個(gè)問(wèn)題赂蕴,之前的需求開(kāi)發(fā)都是自己來(lái)安排時(shí)間柳弄,現(xiàn)在一下子要一定的時(shí)間內(nèi)做完,需要時(shí)間來(lái)適應(yīng)睡腿,加上公司的項(xiàng)目多语御,有些人負(fù)責(zé)多個(gè)項(xiàng)目,時(shí)間安排上會(huì)有沖突
什么是敏捷開(kāi)發(fā)
敏捷開(kāi)發(fā)的核心是迭代開(kāi)發(fā)(iterative development)席怪。敏捷一定是采用迭代開(kāi)發(fā)的方式应闯。
迭代開(kāi)發(fā)將一個(gè)大任務(wù),分解成多次連續(xù)的開(kāi)發(fā)挂捻,本質(zhì)就是逐步改進(jìn)碉纺。開(kāi)發(fā)者先快速發(fā)布一個(gè)有效但不完美的最簡(jiǎn)版本,然后不斷迭代刻撒。每一次迭代都包含規(guī)劃骨田、設(shè)計(jì)、編碼声怔、測(cè)試态贤、評(píng)估五個(gè)步驟,不斷改進(jìn)產(chǎn)品醋火,添加新功能悠汽。通過(guò)頻繁的發(fā)布,以及跟蹤對(duì)前一次迭代的反饋芥驳,最終接近較完善的產(chǎn)品形態(tài)柿冲。增量開(kāi)發(fā)
迭代開(kāi)發(fā)只是要求將開(kāi)發(fā)分成多個(gè)迭代,并沒(méi)有回答一個(gè)重要的問(wèn)題:怎么劃分迭代兆旬,哪個(gè)任務(wù)在這個(gè)迭代假抄,哪個(gè)任務(wù)在下個(gè)迭代?這時(shí),一般采用"增量開(kāi)發(fā)"(incremental development)劃分迭代宿饱。
所謂"增量開(kāi)發(fā)"熏瞄,指的是軟件的每個(gè)版本,都會(huì)新增一個(gè)用戶可以感知的完整功能谬以。也就是說(shuō)巴刻,按照新增功能來(lái)劃分迭代。具體實(shí)現(xiàn)方式
Scrum:Scrum包括了一系列實(shí)踐和預(yù)定義角色的過(guò)程骨架蛉签。Scrum中的主要角色包括同項(xiàng)目經(jīng)理類(lèi)似的Scrum主管角色負(fù)責(zé)維護(hù)過(guò)程和任務(wù)胡陪,產(chǎn)品負(fù)責(zé)人代表利益所有者,開(kāi)發(fā)團(tuán)隊(duì)包括了所有開(kāi)發(fā)人員
XP:極端編程(eXtreme Programming)是一種開(kāi)發(fā)紀(jì)律碍舍,以簡(jiǎn)單性柠座、交流、反饋和勇氣為基本宗旨片橡。它的做法是以有效的實(shí)踐規(guī)則將整個(gè)團(tuán)隊(duì)緊密聯(lián)系起來(lái)妈经,通過(guò)充分的反饋使團(tuán)隊(duì)能隨時(shí)知道自己的狀況和恰當(dāng)?shù)恼{(diào)節(jié)規(guī)則以適應(yīng)自己的特殊情況。對(duì)整個(gè)流程定義非常嚴(yán)格捧书,規(guī)定采用TDD,自動(dòng)測(cè)試吹泡,結(jié)對(duì)編程,簡(jiǎn)單設(shè)計(jì)经瓷,重構(gòu)等約束團(tuán)隊(duì)的行為
ORMLite
對(duì)象關(guān)系映射(Object Relational Mapping爆哑,簡(jiǎn)稱(chēng)ORM)是通過(guò)使用描述對(duì)象和數(shù)據(jù)庫(kù)之間映射的元數(shù)據(jù),將面向?qū)ο笳Z(yǔ)言程序中的對(duì)象自動(dòng)持久化到關(guān)系數(shù)據(jù)庫(kù)中
Object Relational Mapping Lite(ORM Lite)為將Java對(duì)象持久化到SQL數(shù)據(jù)庫(kù)提供了一些簡(jiǎn)單舆吮、輕量級(jí)的功能揭朝,同時(shí)避免了更多標(biāo)準(zhǔn)ORM包的復(fù)雜性和開(kāi)銷(xiāo)。
特點(diǎn):
- 通過(guò)注解來(lái)設(shè)置Java類(lèi)
- 強(qiáng)大的抽象數(shù)據(jù)庫(kù)訪問(wèn)對(duì)象(DAO)類(lèi)
- 靈活的QueryBuilder色冀,可輕松構(gòu)建簡(jiǎn)單和復(fù)雜的查詢
- MySQL潭袱、Postgres、Microsoft SQL Server锋恬、H2屯换、Derby、HSQLDB和Sqlite与学,并且可以相對(duì)容易地?cái)U(kuò)展到其他數(shù)據(jù)庫(kù)
- 處理重復(fù)查詢?nèi)蝿?wù)的"編譯"SQL語(yǔ)句
- 支持事務(wù)
- 支持對(duì)Android SQLite數(shù)據(jù)庫(kù)API的本機(jī)調(diào)用彤悔。
使用:
- 導(dǎo)入jar包,包括ormlite-android和ormlite-core
- 配置Bean類(lèi)
@DatabaseTable(tableName = "tb_user")
public class User
{
@DatabaseField(generatedId = true)
private int id; //id為自動(dòng)生成
@DatabaseField(columnName = "name")
private String name;
...
}
- 編寫(xiě)DAO類(lèi)
public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
private static final String TABLE_NAME = "sqlite-test.db";
/**
* userDao ,每張表對(duì)于一個(gè)
*/
private Dao<User, Integer> userDao;
private DatabaseHelper(Context context) {
super(context, TABLE_NAME, null, 2);
}
private static DatabaseHelper instance;
/**
* 單例獲取該Helper
*
* @param context
* @return
*/
public static synchronized DatabaseHelper getHelper(Context context)
{
if (instance == null)
{
synchronized (DatabaseHelper.class)
{
if (instance == null)
instance = new DatabaseHelper(context);
}
}
return instance;
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource) {
try
{
TableUtils.createTable(connectionSource, User.class);
} catch (SQLException e)
{
e.printStackTrace();
}
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource, int i, int i1) {
try
{
TableUtils.dropTable(connectionSource, User.class, true);
onCreate(sqLiteDatabase, connectionSource);
} catch (SQLException e)
{
e.printStackTrace();
}
}
/**
* 獲得userDao
*
* @return
* @throws SQLException
*/
public Dao<User, Integer> getUserDao() throws SQLException
{
if (userDao == null)
{
userDao = getDao(User.class);
}
return userDao;
}
/**
* 釋放資源
*/
@Override
public void close()
{
super.close();
userDao = null;
}
}
- 增刪改查
User u1 = new User("zhy", "2B青年");
DatabaseHelper helper = DatabaseHelper.getHelper(getContext());
try {
helper.getUserDao().create(u1);
helper.getUserDao().deleteById(2);
helper.getUserDao().update(u1);
List<User> users = helper.getUserDao().queryForAll();
} catch (SQLException e) {
e.printStackTrace();
}