Estoy diseñando un sitio web C#/NHibernate que cuenta con un sistema de mensajería privado. Me gustaría que los administradores verifiquen si un usuario ha leído un mensaje y cuándo, y juntos resaltan los mensajes que aún no han sido leídos por los usuarios. Para obtener a la vez, me encontré con dos opciones:Mejor DateTime? o use el valor predeterminado (DateTime) para NULL?
Opción 1
class Message
{
DateTime? Read;
}
donde Read==null
significa no leído todavía
Opción 2
class Message
{
DateTime Read;
}
donde Read==default(DateTime)
(Enero 1º 1 dC, 0 : 00: 00) significa que aún no se ha leído.
En la universidad, me han enseñado a utilizar el valor NULL
para manejar todas especiales casos, y también utilizando el anulable tipo parece una buena opción ya que parece más fácil para consultar los mensajes no leídos comprobando si son NULL
o no.
Pero, el uso de tipos de nullable al menos implica boxeo y unboxing en el código, con un rendimiento decreciente. Por otro lado, la consulta de los mensajes no leídos significa comparar el valor (pero puede ser indexado)
Mi pregunta es
¿Cuál es su enfoque sugerido para esto? ¿Qué mejores prácticas sugieren en este caso?
Este es semánticamente equivalente a usar 'Anulable', aunque esta versión no será capaz de tomar ventaja de la asignación de la pila (que 'Anulable ' puede, asumiendo las demás condiciones son derecha) y que no encapsula la lógica en un solo miembro. –
@ Adam Robinson, de acuerdo en su mayor parte. No creí que usar un único miembro fuera un requisito previo de la pregunta (aunque supongo que está implícito), y al no encapsular dos piezas de información en un campo, hace que la estructura sea más fácil de admitir, especialmente si ' El desarrollador que hereda el código :) No sigo el punto de asignación de la pila, ¿pueden ampliarlo? – Brett
No era un requisito previo, pero es más fácil realizar operaciones CRUD sin errores en un miembro en lugar de dos. Y no sabía acerca de la asignación de la pila: el punto es que pensé que los valores anulables se asignaron en montón. Y, de todos modos, mi pregunta se centró en las mejores prácticas –