Exemplo n.º 1
0
        public void ShouldFailBusinessLogicWhenDataIsCorrupted()
        {
            string query = "Select something";

            Func <string, Result <string, string> > readData = q => Result.Success <string, string>(null);
            Func <int, Result <string, double> >    mapViews = e => Result.Success <string, double>(e);
            var runRules = StateMan.GetRulesFunc();

            var useCasePipline = from data in readData(query)
                                 from executedRules in runRules(data)
                                 from mappedViews in mapViews(executedRules)
                                 select mappedViews;

            Assert.False(useCasePipline.IsSuccess);
            Assert.Equal("Cannot execute business rules. Input data is broken", useCasePipline.Error);
        }
Exemplo n.º 2
0
        static void Main(string[] args)
        {
            string query = "Select something";
            //double queryResult;

            // Oriented Objet
            var repository  = new Repository();
            var bl          = new BusinessLogic(repository);
            var application = new ApplicationService(bl);

            var result = application.MapViews(query);

            Console.WriteLine("Query result: {0}", result);
            Console.ReadKey();

            // Functional

            Func <Request, Result <string, Request> > validate1 = input =>
            {
                if (string.IsNullOrEmpty(input.Name))
                {
                    return(Result.Error <string, Request>("Name must not be blank"));
                }
                return(Result.Success <string, Request>(input));
            };

            Func <Request, Result <string, Request> > validate2 = input =>
            {
                if (input.Name.Length > 50)
                {
                    return(Result.Error <string, Request>("Name must not be longer than 50 chars"));
                }
                return(Result.Success <string, Request>(input));
            };

            Func <Request, Result <string, Request> > validate3 = input =>
            {
                if (string.IsNullOrEmpty(input.Email))
                {
                    return(Result.Error <string, Request>("Email must not be blank"));
                }
                return(Result.Success <string, Request>(input));
            };

            var request            = new Request();
            var combinedValidation = validate1(request).SelectMany(v2 => validate2(v2), (req, validated2) => new
            {
                req,
                validated2
            }).SelectMany(v3 => validate2(v3.validated2), (v3, validationPassed) => validationPassed);

            var validationResult1 = combinedValidation.IsSuccess
                ? combinedValidation.Success.ToString()
                : combinedValidation.Error;

            Console.WriteLine("Validation1 result: {0}", validationResult1);
            Console.ReadKey();

            var combinedValidation2 = validate1(request)
                                      .SelectMany(
                v2 => validate2(v2)).SelectMany(
                v3 => validate3(v3));

            var validationResult2 = combinedValidation2.IsSuccess
                ? combinedValidation2.Success.ToString()
                : combinedValidation2.Error;

            Console.WriteLine("Validation2 result: {0}", validationResult2);
            Console.ReadKey();

            var readData = StateMan.GetRepoStateFunc();
            var runRules = StateMan.GetRulesFunc();
            var mapViews = StateMan.GetMappersFunc();

            var useCasePipline = from data in readData(query)
                                 from executedRules in runRules(data)
                                 from mappedViews in mapViews(executedRules)
                                 select mappedViews;

            var queryResult = useCasePipline.IsSuccess ? useCasePipline.Success.ToString() : useCasePipline.Error;

            Console.WriteLine("Query result: {0}", queryResult);
            Console.ReadKey();
        }