I like to separate business logic out of POCOs into controllers.
If an object must be thread safe, where do I put the lock code? In the POCO itself? Or in a controller?
Might make sense because value types cannot be locked?
I.e., the 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;
}
}
}
}
The model:
namespace Project2.Models
{
public class LogManager
{
public TimeSpan Interval { get; set; }
public DateTime? LastLog { get; set; }
}
}