Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 如何消除流逻辑的重复?_Oop_Design Patterns - Fatal编程技术网

Oop 如何消除流逻辑的重复?

Oop 如何消除流逻辑的重复?,oop,design-patterns,Oop,Design Patterns,我有一个服务/管理器类,我在其中从数据源获取用户。这些方法都在流中,但具有不同的检索方法 public User GetByUserName(string userName) { user = dependencyResolver.UserRepository.GetByUserName(userName); if (user == null) return null; AddStuffToUser(); re

我有一个服务/管理器类,我在其中从数据源获取用户。这些方法都在流中,但具有不同的检索方法

    public User GetByUserName(string userName)
    {
        user = dependencyResolver.UserRepository.GetByUserName(userName);

        if (user == null) return null;

        AddStuffToUser();

        return user;
    }

    public User GetById(int id)
    {
        user = dependencyResolver.UserRepository.GetById(id);

        if (user == null) return null;

        AddStuffToUser();

        return user;
    }

    public User GetByUserName(string userName, string encryptedPassword)
    {
        user = dependencyResolver.UserRepository.GetByUsernameAndPassword(userName, encryptedPassword);

        if (user == null) return null;

        AddStuffToUser();

        return user;
    }
我想消除流逻辑的重复,但我找不到令人满意的设计。我可以通过使用OOP来完成,但我认为这样一个简单的任务会增加很多复杂性。我还尝试将fetch方法作为Func参数传递,但由于fetch方法具有不同的参数,所以没有正确地传递

我的选择是什么

替换:

if (user == null) return null;

        AddStuffToUser();

        return user;
与:

并加上:

private User doXYZ(User user){
    if (user != null){
        AddStuffToUser();
        return user;}
    return null;

此时,u为9放置了6行,其更好的代码样式OOP标准在任何任务中都是有用的

我一直读到这一行:user=dependencyResolver.UserRepository.GetByUserNameuserName;在那里你违反了德米特的法律。首先修正一句有趣的话@AlmaDo。dependencyReslover仅返回存储库接口。我可以编写IUserRepository userRepository=dependencysolver.userRepository;userRepository.GetByUserNameuserName;dependencyResolver被传递给服务的构造函数。我明白我不应该信任朋友的朋友,但dependencyResolver和UserRepository更像是兄弟而不是朋友。我能把一个兄弟交给一个朋友吗?还是这仍然违反了德米特的法律?我相信你想做的是封装一个秘密。请注意,此时您实际上正在脱离OOP领域,进入AOP。感谢您的回复。这个问题中的例子很简单,正如你所建议的,可以重构。但我正在寻找一种更通用的解决方案,用于消除流逻辑的重复。
private User doXYZ(User user){
    if (user != null){
        AddStuffToUser();
        return user;}
    return null;