Cómo modelar procedimientos y funciones con diseño dirigido por dominio

Olvídate de los objetos y la programación por un minuto; en cambio piense en datos o información. Las preguntas con las que debe comenzar son:

  1. ¿Cuáles son las entidades en el sistema? (Por ejemplo: clientes, pedidos, productos, etc.)
  2. ¿Cuáles son las relaciones entre las entidades? (Por ejemplo: los clientes pueden estar asociados con cero o más pedidos; los pedidos pueden estar asociados con uno o más productos).
  3. ¿Cuáles son los atributos fundamentales de las entidades? (Por ejemplo: los clientes pueden tener un nombre, apellido, dirección y fecha de nacimiento).
  4. ¿Qué información derivada se requiere? (Por ejemplo: para cada cliente, se requieren sus atributos fundamentales junto con su edad actual en años y el saldo de la cuenta).

Tenga en cuenta la distinción importante entre los atributos fundamentales y los atributos derivados: la fecha de nacimiento (de un cliente) o la fecha de pedido (para un pedido) son fundamentales, mientras que la edad de un cliente o la edad de un pedido se derivan de atributos fundamentales. Es importante porque solo necesita registrar los atributos fundamentales; los derivados se pueden calcular según sea necesario (por definición). Si los atributos fundamentales cambian, los derivados se pueden volver a calcular según sea necesario.

Si tiene respuestas a estas preguntas, entonces ha comenzado (o completado) el modelado de su sistema. Si lo desea, puede documentarlo con un modelo de entidad-relación [1].

Después de completar el modelado del sistema, puede comenzar a pensar en cómo implementar el sistema. Si está utilizando un enfoque de procedimiento (en lugar de OO), normalmente crearía un módulo para cada entidad, y cada módulo exportaría una API para crear / acceder / actualizar los datos en el sistema. Por ejemplo, el módulo de clientes puede tener las siguientes funciones:

  • clientes.crear (nombre, apellido, …) -> mango_cliente
  • customers.get_first_name (customer_handle) -> first_name
  • customers.set_first_name (customer_handle, first_name)
  • customers.get_age (customer_handle) -> edad
  • customers.set_date_of_birth (customer_handle, date_of_birth)

Tenga en cuenta que customer_handle podría ser un puntero a una estructura, o un identificador de enteros o lo que tenga sentido para su lenguaje e implementación en particular. Tenga en cuenta también que solo hay una función get_age, no set_age, porque la edad se deriva de date_of_birth.

Notas al pie

[1] Modelo de entidad-relación – Wikipedia

More Interesting

Cómo convertirse en un programador más lento

¿Cuál es la mejor manera de escribir un CV para una pasantía de ingeniería de software?

¿Qué debe hacer un probador de software (manual) a tiempo parcial para obtener ingresos secundarios en India?

¿Cuál es su proceso personal para encontrar una solución a un problema de programación?

En la industria del software, ¿qué idioma se usa más?

¿Cuál es el mejor software de generación de plomo para la industria manufacturera / industrial?

¿Cuáles son algunas de las ventajas y desventajas de hacer una Maestría en Ciencias de la Computación (MS CS) para alguien con una Licenciatura en Ciencias de la Computación de una de las principales universidades indias / chinas, que actualmente trabaja en una subsidiaria local de una importante compañía de software de los Estados Unidos?

¿Cómo se construyeron grandes proyectos de software para desarrolladores múltiples antes de la creación de redes informáticas?

¿Qué es el ciclo de vida del desarrollo de software?

¿Cuál es la relación entre un diagrama de caso de uso y el diagrama de clase? ¿Cuál es la diferencia entre un diagrama de caso de uso y un diagrama de secuencia?

¿Preocupado por el primer trabajo haciendo Ruby on Rails?

Desde el punto de vista de la ingeniería de software: ¿es mejor usar SQL de procedimiento o SQL incorporado en código?

¿Cuánta programación debes saber antes de aprender DS & Algo?

¿Hay ingenieros que no son 10x, pero 100x o 1000x tan productivos como el promedio?

¿Cuál es el nombre del ingeniero de software que causó el error Mariner 1 que estrelló el cohete de la NASA?