Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.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
Asp.net mvc 我如何有效地实现如此喜欢的收藏夹和投票功能?_Asp.net Mvc - Fatal编程技术网

Asp.net mvc 我如何有效地实现如此喜欢的收藏夹和投票功能?

Asp.net mvc 我如何有效地实现如此喜欢的收藏夹和投票功能?,asp.net-mvc,Asp.net Mvc,我正在使用ASP.NETMVC、SQLServer2008和表单身份验证。假设我正在建立一个问答网站,就像这样 以下是我遇到的问题: 用户可以在未登录时查看几乎所有的问题,就像他们在登录时一样。问题获取、查询等几乎都是书面的 现在,如果用户登录,他还应该能够判断他是否已经投票或“赞成”这个问题,如下图所示 我要回去重写我所有的作品吗 要包含useridit的查询 参数,即使用户是 我只是想知道这一点 信息 或者当用户登录时 在我看来,他所投的票都是我的 并全程跟踪 他的疗程 两者看起来都很麻烦,

我正在使用ASP.NETMVC、SQLServer2008和表单身份验证。假设我正在建立一个问答网站,就像这样

以下是我遇到的问题:

用户可以在未登录时查看几乎所有的问题,就像他们在登录时一样。问题获取、查询等几乎都是书面的

现在,如果用户登录,他还应该能够判断他是否已经投票或“赞成”这个问题,如下图所示

  • 我要回去重写我所有的作品吗 要包含useridit的查询 参数,即使用户是 我只是想知道这一点 信息
  • 或者当用户登录时 在我看来,他所投的票都是我的 并全程跟踪 他的疗程
  • 两者看起来都很麻烦,但至少效率更高。有人知道这是怎么做到的,还是更有效的方法


    我认为它不会记录用户是否投票,但它似乎会记录用户是否“赞成”这个问题

    您可以使用多个接口,一个用于匿名访问,一个用于身份验证访问,并对每个接口执行不同的查询:

    //只是示例代码-不是asp.net-mvc
    接口匿名读卡器
    {
    IEnumerable GetAnswers(int page,int countPerPage);
    }
    接口IAAuthenticateDreader
    {
    IEnumerable GetAnswers(整版,整版),
    int用户标识);
    //另一种方法是从具体类中获取userId,并传入ctor
    }
    
    这将要求您编写多个查询,或者返回您刚刚丢弃的数据。通过编程构造查询,可以避免代码重复。通过使用ORM,可以避免首先编写查询


    至于数据,您可以对数据进行规范化,以便投票信息位于单独的表中,但仍然绑定到答案。当您为匿名用户执行查询时,只需不加入/查询该表。

    是,数据是标准化的。但是,基本上您要求我编写两个版本的fetch查询。我必须使用接口吗?@progick:不,你不必使用接口。对同一基础数据进行多个表示被认为是一个强有力的设计原则。这些是否是类、抽象类、接口、Web服务接口等都是实现细节。为什么会厌恶多重查询?代码(或代码复制)真的有那么大吗?如果您真的无法忍受代码重复(例如,以编程方式构造查询字符串),那么可以使用一些技术,并且可以通过使用ORM层避免编写查询本身。就像我有7-8个查询来获取问题,现在我必须返回并编写7-8个查询。。但没关系,我guess@progtick:这些查询中有多少需要更改,有多少相同?您可以将这些查询的字符串放在公共区域中,因此只需编写一次重复的查询。如果大字符串中有重复的部分,则可以拆分字符串并将其连接在一起,或者如果查询是嵌套的,则生成函数以将一个查询字符串与外部查询包装在一起。@progtick:如果问题确实是如何避免重复查询,是否可以放置一些(精简、修改以避免暴露您的私人数据)问题中查询的版本,以便我们可以帮助您解决该问题。或者您可以提出第二个问题。
    // Just example code - not asp.net-mvc
    interface IAnonymousReader
    {
        IEnumerable<Answer> GetAnswers(int page, int countPerPage);
    }
    
    interface IAuthenticatedReader
    {
        IEnumerable<AuthenticatedAnswer> GetAnswers(int page, int countPerPage,
            int userId);
        // An alternative here is to get userId from concrete class, and pass in ctor
    }