Ver Mensaje Individual
  #2  
Antiguo 23-12-2005
Avatar de __hector
[__hector] __hector is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Santo Domingo, Rep. Dom.
Posts: 1.075
Reputación: 23
__hector Va por buen camino
Que no se puede? Eso no debe ser cierto.

Que sea una debilidad de Delphi, es posible, pero no de .NET. Un dataset instanciado, como cualquier otro tipo de objeto, puede ser accedido de acuerdo a los modificadores de acceso con los que se le ha declarado. Ahora bien, tienes que tomar en cuenta que, de acuerdo a la metodologia que utilices, puedes o no ver el contenido del dataset. Digamos que existen distintas formas (casos explicados en C#, que es el lenguaje con el que mas me familiarizo):

- Un DataSet marcado como static, puede ser accedido utilizando la nomenclatura NombreClase.NombreDataSet. Al mismo tiempo, no puede ser llenado desde una instancia de la clase que lo contiene, sino que en la misma clase debe ser tratado como un objeto que pertenece a una clase, y no a la instancia de la misma. Ej:

Código:
 public class TalClase
 {
   .....
   public static DataSet MiDataSet = new DataSet();
 }
- Utilizando el patron de diseño Singleton (mi recomendacion particular), puedes obtener, a traves de los distintos formularios de tu programa, una instancia unica y global de una clase en particular (formulario, o cualquier otra clase). Este es un breve caso de uso:

Código:
public class ClaseFormulario {

  private static ClaseFormulario instance;
  private DataSet miDataSet;
  
  public static ClaseFormulario GetInstance()
  {
    if(instance == null)
    {
       instance = new ClaseFormulario();
       instance.miDataSet = new DataSet();
    }
   return instance;
  }
}
Ahi tenemos: una variable privada, estatica, que contendra la instancia de la clase formulario a traves del ciclo de vida del programa, y un metodo, GetInstance, que verificara si la instancia ha sido creada previamente, y en caso de que no, crea una nueva instancia de ese tipo.

Usando este patron de diseño, se garantiza la disponibilidad de una misma instancia del objeto.

Caso de uso:

Código:
public class FormularioConsumer
{
 private ClaseFormulario formConDataSet;
 
 public FormularioConsumer
 {
   if(formConDataSet == null)
    formConDataSet = ClaseFormulario.GetInstance();
 }
}
Recomendacion: separa tus objetos de datos de los formularios, asi como los metodos que actualizan estos datos, e incluso los calculos y reglas de negocio, tal como lo hacias con D7..<, de forma tal que puedas reutilizar el codigo ahi escrito desde cualquier otro proyecto, con cambios minimos, ademas de tener un diseño mas claro.
__________________
Héctor Geraldino
Software Engineer
Responder Con Cita