Mi piace separare la logica di business dai POCO ai controllori.
Se un oggetto deve essere thread-safe, dove inserisco il codice di blocco? Nello stesso POCO? O in un controller?
Potrebbe avere senso perché i tipi di valore non possono essere bloccati?
I.e., il controller:
namespace Project1.Controllers
{
public class LogManagerController
{
private object _lock = new object();
public LogManager Fill(TimeSpan interval, DateTime? lastLog)
{
return new LogManager {Interval = interval, LastLog = lastLog};
}
public void Update(LogManager logManager, DateTime lastLog)
{
lock (_lock)
{
logManager.LastLog = lastLog;
}
}
public DateTime? Get(LogManager logManager)
{
lock (_lock)
{
return logManager.LastLog;
}
}
}
}
Il modello:
namespace Project2.Models
{
public class LogManager
{
public TimeSpan Interval { get; set; }
public DateTime? LastLog { get; set; }
}
}