0xDEAD BEEF
0xDEAD BEEF

Reputation: 2104

What architecture to choose (WCF services, server side logic)

I am developing server side logic to process requests and respond with data to front-end server as well as to mobile app direct connections.

I have implemented SessionContext class that basically ensures, that there is matching session record in DB for every service that is called (with exception for forgot password cases, etc).

I am now trying to implement event logging. I want to have common logic so I may log all requests, exceptions, data, etc.

I have come up with this code, but somehow I don't feel good about it - too much code for each service method. Are there any clever tricks that I might implement to make it shorter and easier to read/code?

Current implementation would use EventLogic class to log event to event table. At some point some events might be related to session so I am passing eventLog as parameter to SessionContext (to create link between event and session). SessionContext saves entity data on successful dispose... i have a gut feeling that something is wrong with my design.

public Session CreateUser(string email, string password, System.Net.IPAddress ipAddress)
{
    using (var eventLog = new EventLogic())
    {
        try
        {
            eventLog.LogCreateUser(email, password, ipAddress);

            using (var context = SessionContext.CreateUser(eventLog, email, password, ipAddress))
            {
                return new Session()
                {
                    Id = context.Session.UId,
                    HasExpired = context.Session.IsClosed,
                    IsEmailVerified = context.Session.User.IsEmailVerified,
                    TimeCreated = context.Session.TimeCreated,
                    PublicUserId = CryptoHelper.GuidFromId(context.Session, context.Session.UserId, CryptoHelper.TargetTypeEnum.PublicUser),
                    ServerTime = context.Time
                };
            }
        } 
        catch (Exception e)
        {
            eventLog.Exception(e);
        }
    }
}

Upvotes: 0

Views: 44

Answers (1)

Vladislav Rastrusny
Vladislav Rastrusny

Reputation: 29965

You should consider using something like SLF4J + LogBack (for example) for logging.

If your classes follow SRP, you should have not more than one call type like LogCreateUser per your application. And that means, there is no need to extract logging logic into a new class.

Upvotes: 1

Related Questions