Sur un site, une personne ayant une longue expérience de Java m'aide avec un projet C #. Une partie du code utilisait une interface fluide, mais je n'étais pas tout à fait convaincu. J'ai essayé de créer un exemple de code en me référant au code à ce moment-là.
Spécifications) Mettez à jour le DB en fusionnant les valeurs d'écran avec les résultats obtenus du DB.
/**Traitement principal**/
private Dao _dao = new Dao();
public void Main()
{
//Obtenez les informations actuelles de la base de données.
var param = new UpdateParameter(_dao)
.SetHeader(1)
.SetHeader2("a")
.SetHeader3(2);
//Reflétez les informations à l'écran.
SetValueFromView(param);
//Mettez à jour la base de données.
_dao.Update(param);
}
private void SetValueFromView(UpdateParameter param)
{
//Header1 du paramètre qui a obtenu la valeur de l'écran,2,Réfléchissez en 3.
//Code omis
}
/**Classe de paramètres qui résume le DTO de la table de mise à jour de la base de données**/
public class UpdateParameter
{
public Header Header { get; private set; }
public Header2 Header2 { get; private set; }
public Header3 Header3 { get; private set; }
private readonly Dao _dao = null;
public UpdateParameter(Dao dao)
{
_dao = dao;
}
public UpdateParameter SetHeader(int id)
{
Header = _dao.GetHeader(id);
return this;
}
public UpdateParameter SetHeader2(string code)
{
Header2 = _dao.GetHeader2(code);
return this;
}
public UpdateParameter SetHeader3(int id)
{
Header3 = _dao.GetHeader3(id);
return this;
}
}
/** Header1,2,3 DTO**/
public class Header
{
public int Id { get; set; }
}
public class Header2
{
public string Code { get; set; }
}
public class Header3
{
public int Id { get; set; }
}
/**Dao pour l'acquisition et la mise à jour des données**/
public class Dao
{
public Header GetHeader(int id)
{
//Obtenir l'en-tête
return new Header() { Id = id };
}
public Header2 GetHeader2(string code)
{
//Obtenir l'en-tête 2
return new Header2() { Code = code };
}
public Header3 GetHeader3(int id)
{
//Obtenir l'en-tête 3
return new Header3() { Id = id };
}
public void Update(UpdateParameter param)
{
//Exécutez le traitement de mise à jour de la base de données. Code omis
}
}
private Dao dao = new Dao();
public void main() {
//Obtenez les informations actuelles de la base de données.
UpdateParameter param = new UpdateParameter(dao)
.setHeader(1)
.setHeader2("a")
.setHeader3(2);
//Reflétez les informations à l'écran.
setValueFromView(param);
//Mettez à jour la base de données.
dao.update(param);
}
private void setValueFromView(UpdateParameter param) {
//Header1 du paramètre qui a obtenu la valeur de l'écran,2,Réfléchissez en 3.
//Code omis
}
public class UpdateParameter {
private Header header = null;
private Header2 header2 = null;
private Header3 header3 = null;
private final Dao dao;
public UpdateParameter(Dao dao) {
this.dao = dao;
}
public UpdateParameter setHeader(int id) {
this.header = dao.getHeader(id);
return this;
}
public UpdateParameter setHeader2(String code) {
this.header2 = dao.getHeader2(code);
return this;
}
public UpdateParameter setHeader3(int id) {
this.header3 = dao.getHeader3(id);
return this;
}
public Header getHeader() {
return header;
}
public Header2 getHeader2() {
return header2;
}
public Header3 getHeader3() {
return header3;
}
}
/** Header1,2,3 DTO**/
public class Header {
private int id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
public class Header2 {
private String Code;
public String getCode() {
return Code;
}
public void setCode(String code) {
Code = code;
}
}
public class Header3 {
private int Id;
public int getId() {
return Id;
}
public void setId(int id) {
Id = id;
}
}
/**Dao pour l'acquisition et la mise à jour des données**/
public class Dao {
public Header getHeader(int id) {
//Obtenir l'en-tête
Header header = new Header();
header.setId(id);
return header;
}
public Header2 getHeader2(String code) {
//Obtenir l'en-tête 2
Header2 header2 = new Header2();
header2.setCode(code);
return header2;
}
public Header3 getHeader3(int id) {
//Obtenir l'en-tête 3
Header3 header3 = new Header3();
header3.setId(id);
return header3;
}
public void update(UpdateParameter param) {
//Exécutez le traitement de mise à jour de la base de données. Code omis
}
}
Il semble que l'interface soit telle que UpdateParameter s'écoule, mais ce code présente les problèmes suivants.
Vous pouvez voir l'avantage d'une interface fluide dans une classe comme StringBuilder. D'un autre côté, cela semble étrange de l'utiliser dans une classe qui ne contient que des informations simples telles que UpdateParameter.
/**Traitement principal**/
private Dao _dao = new Dao();
public void Main()
{
//Obtenez les informations actuelles de la base de données.
var param = new UpdateParameter();
//Récupérez les données de DB dans le processus principal.
param.Header = _dao.GetHeader(1);
param.Header2 = _dao.GetHeader2("a");
param.Header3 = _dao.GetHeader3(2);
//Reflétez les informations à l'écran.
SetValueFromView(param);
//Mettez à jour la base de données.
_dao.Update(param);
}
private void SetValueFromView(UpdateParameter param)
{
//Header1 du paramètre qui a obtenu la valeur de l'écran,2,Réfléchissez en 3.
//Code omis
}
/**Classe de paramètres qui résume le DTO de la table de mise à jour de la base de données**/
public class UpdateParameter
{
public Header Header { get; set; }
public Header2 Header2 { get; set; }
public Header3 Header3 { get; set; }
//Supprimer la référence Dao
}
/** Header1,2,3 DTO**/
public class Header
{
public int Id { get; set; }
}
public class Header2
{
public string Code { get; set; }
}
public class Header3
{
public int Id { get; set; }
}
/**Dao pour l'acquisition et la mise à jour des données**/
public class Dao
{
public Header GetHeader(int id)
{
//Obtenir l'en-tête
return new Header() { Id = id };
}
public Header2 GetHeader2(string code)
{
//Obtenir l'en-tête 2
return new Header2() { Code = code };
}
public Header3 GetHeader3(int id)
{
//Obtenir l'en-tête 3
return new Header3() { Id = id };
}
public void Update(UpdateParameter param)
{
//Exécutez le traitement de mise à jour de la base de données. Code omis
}
}
private Dao dao = new Dao();
public void main() {
//Obtenez les informations actuelles de la base de données.
UpdateParameter param = new UpdateParameter();
//Récupérez les données de DB dans le processus principal.
param.setHeader(dao.getHeader(1));
param.setHeader2(dao.getHeader2("a"));
param.setHeader3(dao.getHeader3(2));
//Reflétez les informations à l'écran.
setValueFromView(param);
//Mettez à jour la base de données.
dao.update(param);
}
private void setValueFromView(UpdateParameter param) {
//Header1 du paramètre qui a obtenu la valeur de l'écran,2,Réfléchissez en 3.
//Code omis
}
public class UpdateParameter {
private Header header = null;
private Header2 header2 = null;
private Header3 header3 = null;
//Supprimer la référence Dao
public void setHeader(Header header) {
this.header = header;
}
public void setHeader2(Header2 header2) {
this.header2 = header2;
}
public void setHeader3(Header3 header3) {
this.header3 = header3;
}
public Header getHeader() {
return header;
}
public Header2 getHeader2() {
return header2;
}
public Header3 getHeader3() {
return header3;
}
}
//Le code suivant est omis
Je viens de supprimer la référence Dao de UpdateParameter et j'ai obtenu la base de données du côté du traitement principal, mais ce code est convaincant.
J'ai environ un an d'expérience en développement Java, je me demande donc si le code affiché dans l'exemple est normal pour Java. Aussi, quelle est la raison d'utiliser une interface fluide même si les problèmes décrits dans "Ce qui m'intéressait" sont laissés tels quels.
[Article précédent (collection de code un peu inquiétante)] (http://qiita.com/csharpisthebest/items/7d9d2c7e4da4b89488fd)
[Article suivant (déclaration d'affectation redondante)] (http://qiita.com/csharpisthebest/items/f9ebc741e40037553d5b)
Recommended Posts