Protegendo propriedades de domínio anuláveis com ViewModel
Estou usando o Entity Framework 4.0 e fazendo uso de objetos POCO. Quando eu preenche objetos POCO do banco de dados, eu traduzo valores de propriedade para meus próprios objetos de domínio, que podemos chamar de meu modelo.
Necessariamente, se os campos do meu Modelo são Nullable ou não depende se o valor que ele mapeia no banco de dados é proveniente de uma coluna NULL ou NOT NULL. Eu não vou entrar em detalhes, mas os valores devem ser anuláveis no banco de dados, porque um usuário pode salvar parcialmente um rascunho do objeto antes de publicá-lo para o público. Sendo esse o caso, eu tenho vários campos que são anuláveis. Então, digamos que meu modelo se pareça com:
public class MyModel
{
public int? Field1 {get; set; }
public DateTime? Field2 {get; set; }
public int Field3 {get; set; }
}
Se eu usar esse modelo em minha visualização, completo com campos anuláveis, eu começo a receber erros que me dizem que não posso usar propriedades anuláveis como valores em vários lugares, como ajudantes HTML, etc. Eu poderia dizer algo comoif (Model.MyBoolField.HasValue && Model.MyBoolField.Value) { // etc }
, mas isso parece volumoso para uma visão.
Eu considerei criar um objeto ViewModel que herda do meu objeto de domínio original enew
, versões não anuláveis de meus campos anuláveis que retornam um valor apropriado se a versão base for nula. Então, algo como:
public class MyViewModel : MyModel
{
public new int Field1
{
get { return base.Field1 ?? 7; }
}
public new DateTime Field2
{
get { return base.Field2 ?? DateTime.Now; }
}
}
Meu problema com isso é que eu nem sempre conheço um bom valor "padrão" para exibir. E se eu jogasse uma exceção no getter do View Model quando o valor base fosse nulo? Essa prática é ruim?
Basicamente, estou procurando uma prática recomendada sobre como lidar com campos anuláveis em um modelo, especialmente ao exibir em uma Visualização.