Pregunta

Actualmente tengo una clase VB.NET llamada " Clientes " y ha ido creciendo constantemente y ahora tengo un par de docenas de funciones en él. ¿Hay una manera de mantener las funciones en la misma clase? Ya que todavía usan métodos privados comunes, pero los agrupan por similitud.

Por ejemplo:

Class Customers
-GetData
---GetCustomerObject()
---GetCustomerFieldx()
-Lists
---GetSomeList()
---GetAnotherList()
-Maintenance
---AddCustomer()
---DeleteCustomer()
---UpdateCustomer()

ACTUALIZACIÓN: supongo que no tenía claro dónde quería que se produjera esta agrupación. Quiero que las agrupaciones sean casi como espacios de nombres / clases en IntelliSense cuando uso mi clase de Cliente. Actualmente utilizo Regions, pero solo ayudan cuando veo el código, no cuando uso la clase.

¿Fue útil?

Solución

No recomendaría regiones para agrupar el contenido de sus archivos de forma general.

Si su archivo crece a un tamaño tal que usted siente que necesita agrupar cosas para recuperar el control, entonces esa es una sugerencia que debe tratar de refactorizar la clase en varias clases, cada una responsable de un subconjunto de lo que hizo la clase original, por lo que que no termines con el desorden no comprobable que es el objeto de Dios

Otros consejos

No veo ningún código que muestre cómo implementar las sugerencias, así que lo agregaré aquí. Es necesario dividir el código en clases basadas en la función. Luego, agregue la palabra clave del espacio de nombres a cada una de las clases que realice. Aquí está el artículo de MSDN con más detalles ( http://msdn.microsoft .com / en-us / library / ms973231.aspx # assenamesp_topic3 ??). Aquí está el código psuedo. Luego haría referencia al código utilizando projectname.namespace.classname.method.

namespace Customers
-Class GetData 
---GetCustomerObject() 
---GetCustomerFieldx()
end namespace

namespace Customers 
-Class Lists 
---GetSomeList() 
---GetAnotherList() 
end namespace

namespace Customers 
-Class Maintenance 
---AddCustomer() 
---DeleteCustomer() 
---UpdateCustomer()
end namespace 

Utilice las regiones de código en sus archivos de origen. Esto le brinda botones de expandir / contraer para que pueda ocultar secciones del archivo.

#Region "GetData"
    ... code ...
#End Region

#Region "Lists"
    ... code ...
#End Region

#Region "Maintenance"
    ... code ...
#End Region

Me parece que la clase de Clientes puede estar haciendo demasiado y debe desglosarse para cumplir con el Principio de Responsabilidad Única. La idea es que una clase sepa cómo hacer una cosa bien y obtener datos es una responsabilidad diferente de llevar a cabo la lógica de negocios con dichos datos. Actualmente estoy pasando por el proceso de aprendizaje de tratar de dividir mis clases monolíticas en clases más pequeñas y específicas, por lo que no puedo dar buenos consejos sobre cómo hacer esto, pero hay muchos recursos en la web para ayudar: / p>

gusta esto

Tenga un poco de google para SOLID y el tío Bob (Robert C. Martin) para una bondad adicional.

Región es una solución que recomiendo. Pero también puedes usar clases parciales.

Y recuerde, cuando divide la clase en clases mucho más pequeñas, tiene la capacidad de ubicarlas en un sistema de espacio de nombres de profundidad arbitraria. El espacio de nombres Project.Customer.Data podría albergar las clases GetCustomerObject y GetCustomerField.

(Por más que nada, estoy tratando de aprender a aplicar SOLID a mi trabajo de VB.NET. ¿Es este el tipo de cosa que terminaste implementando?)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top