O SqlCommand deveria ter uma propriedade chamada SQL (como um
TSQLQuery o tem tbm), esta seria usada de duas formas:
1º) para criação direta de sql sem a necessidade de um arquivo ou
outro mecanismo mais complicado:
IResumoContas = interface
property Total: Double read GetTotal;
end;
var
vSqlCommand: ISqlCommandQuery;
vResumo: IResumoContas;
begin
vSqlCommand.SQL.Text := 'select sum(valor) total from contas';
vResumo := vSqlCommand.GetResult as IResumoContas;
end;
Na minha opnião essa propriedade sql deve existir sim.Com relação ao exemplo a cima, acredito que temos um problema. Como o Infra vai saber que o select se refere a entidade IResumoContas? No Hibernate dá pra fazer assim:List result = session.createSQLQuery("select * from CATEGORY").addEntity(Category.class).list();e assimsession.createSQLQuery("select {i.*}, {u.*} from ITEM i" +
" join USERS u on i.SELLER_ID = u.USER_ID" +
" where u.USERNAME = :uname")
.addEntity("i", Item.class)
.addJoin("u", "i.seller")
.setParameter("uname", "johndoe");
Quanto a classe Criteria ser uma classe a parte (leia-se independente) eu não estou certo de que seja a melhor abordagem, afinal, ela está diretamente ligada com o SqlCommand. Eu não deveria precisar instanciar uma classe TCriteria e passá-la para um GetResult ou GetList. E realmente não precisaria se Criteria fosse uma propriedade de SqlCommand. Agora, se vc puder explicar as razões que te levam a pensar diferente talvez eu mude de opinião.