Muy bien, ya estamos definiendo reglas de negocio.
Las colecciones te servirán para catálogos de información: Si estás definiendo un catálogo de productos, inventariando, etc, las colecciones son viables.
Las clases que definen objetos, deberían esecificar registros específicos.
Digamos que, para poner un ejemplo, estás definiendo objetos para facturar. Necesitarias un objeto para la factura, un objeto para una partida de la factura y una colección de partidas.
Los catálogos necesarios son el de clientes, con sus direcciones, etc y el de productos, con sus precios unitarios. Es decir, que tienes dos accessos a datos cuando abres la pantalla de factura, para cargar esos datos y los guardas, según tu preferencia, en colecciones o en arreglos globales. Son catálogos y dado que no ocupas mayormente de sus propiedades, no requerirías hacer una mayor implementación, sólo necesitas tener los valores de ellos disponibles, así que un arreglo puede llegar a ser suficiente.
Con esto, puedes hacer el llenado de la factura, opniendo la fecha, la dirección fiscal, la dirección a donde será enviada y un largo etc.
Lo que necesitarías es que, previo a guardar la factura, validaras que, para cada partida en la colección, existiera inventario para poderla surtir. Por eso definimos el objeto de partida de factura, para que este, como objeto, validara antes de guardar cada una. Esto se puede hacer desde la colección y luego de que validara todas, mandara a guardar, o que para cada una si valida, entonces que inmediatamente guarde. Así, tienes tantos accesos a datos como partidas tengas mas 1 que guardaría la factura.
Las reglas de negocio que seguramente tendrás que definir son:
Como validar: Necesitas un query que te diga si hay suficiente inventario para surtir.
Que hacer en caso de no haber inventario: Puedes cancelar el ingreso de la factura o generar un pedido para surtir inventario y luego poder surtir la factura o pedir la confirmación para eliminar dicha partida o adecuarla a la cantidad de inventario que tengas.
Como ves, es un caso de uso que, aunque simple como pueda ser una factura, definirá reglas de negocio que quizás no estén contempladas y requeriras ponerte de acuerdo con los usuarios para saber que hacer. La clave es hacer tantos accesos a base de datos como sean necesarios, en lugar de bloquear registros, para que la ejecución se haga sin problemas, pero impidiendo que otros usuarios puedan hacer algo en el sistema.
No puedo menos que hacer notar que hará falta que tu red esté en óptimas condiciones y que los queries sean también lo más eficiente posible. Y con esto me refiero a que, para validar que exista inventario, es preferible hacer un query así:
"select nCantidad - " & Cantidad & " from Articulos where cIdProducto = '" & IdProducto & "'"
y luego checar si es negativo, que hacer esto:
"select * from Articulos where cIdProducto = '" & IdProducto & "'"
para luego buscar la cantidad de inventario en el recordset devuelto y luego restárselo a la cantidad en la partida para saber si es negativo.
Espero que te sirva de referencia.
Saludos.