S2DataSet
インターフェースを考えてみました。
S2はほんとうにインターフェース駆動プログラミング(IDD)だ。(笑
public interface DataSet {
public int getTableSize();
public String getTableName(int index);
public DataTable getTable(String tableName)
throws TableNotFoundRuntimeException;
public DataTable getTable(int index);
public DataTable addTable(String tableName);
public DataTable addTable(DataTable table);
public DataTable removeTable(String tableName)
throws TableNotFoundRuntimeException;
public DataTable removeTable(int index);
public DataTable removeTable(DataTable table)
throws TableNotFoundRuntimeException;
}
public interface DataTable {
public String getTableName();
public void setTableName(String tableName);
public int getRowSize();
public DataRow getRow(int index);
public DataRow addRow();
public int getRemovedRowSize();
public DataRow getRemovedRow(int index);
//DataRow.remove()されたデータは、このメソッドで
//DataTableから削除される
public DataRow[] removeRows();
public int getColumnSize();
public DataColumn getColumn(int index);
public DataColumn getColumn(String columnName)
throws ColumnNotFoundRuntimeException;
public String getColumnName(int index);
public ColumnType getColumnType(int index);
public DataColumn addColumn(String columnName,
ColumnType columnType);
}
public interface DataRow {
public Object getValue(int index);
public Object getValue(String columnName)
throws ColumnNotFoundRuntimeException;
public void setValue(int index, Object value);
public void setValue(String columnName, Object value)
throws ColumnNotFoundRuntimeException;
public DataTable getTable();
public RowState getState();
public void setState(RowState rowState);
public void remove();
}
public interface RowStates {
public RowState UNCHANGED = new UnchangedState();
public RowState CREATED = new CreatedState();
public RowState MODIFIED = new ModifiedState();
public RowState REMOVED = new RemovedState();
}
public interface DataColumn {
public String getColumnName();
public ColumnType getColumnType();
public boolean isPrimaryKey();
public void setPrimaryKey(boolean primaryKey);
public boolean isWritable();
public void setWritable(boolean writable);
}
public interface ColumnTypes {
public ColumnType STRING = new StringType();
public ColumnType BIGDECIMAL = new BigDecimalType();
public ColumnType TIMESTAMP = new TimestampType();
public ColumnType BINARY = new BinaryType();
}
public interface TableReader {
public DataTable read();
}
public interface TableWriter {
public void write(DataTable table);
}
class SqlTableReader implements TableReader {
public void setDataSource(DataSource dataSource) {
...
}
public void setSql(String sql) {
...
}
public DataTable read() {
...
return table;
}
}
結構本格的かも(笑)。
class SqlTableWriter implements TableWriter {
public void setDataSource(DataSource dataSource) {
...
}
public void write(DataTable table) {
...
}
}
Select文は自分で書きたいけど、更新はフレームワークに任せたいって
人向きですね。