小编Mar*_*ent的帖子

抽象 CRUD 控制器是个好主意吗?

我们正在使用 ASP.NET MVC 开发一个相当大的应用程序,一开始我们发现拥有一个具有常见 CRUD 操作(新建、保存、删除...)以及默认列表操作的抽象基本控制器可能很有用。在我们的例子中,我们有 20 多个实体通过这种控制器进行管理。

这有效并避免了重复一些代码并使应用程序更加同构,但是当您看到控制器时很难准确地看到它实现了哪些操作,并且它可能实现了一些不应该存在的操作。例如,假设您想要编辑传递名称而不是 id,则必须创建一个新的 EditByName(name),即使这样做,您仍然可以使用 Edit(id) 操作,因为它位于基础中。

对我来说,整个事情对我来说有点味道,但我没有找到任何显示替代方案的示例,因为我看到的 MVC 应用程序的领域非常狭窄。有什么建议吗?有什么例子吗?(我不一定使用 ASP.NET MVC,我认为这个问题对于任何 MVC 框架来说都是非常普遍的)。

model-view-controller asp.net-mvc crud

5
推荐指数
1
解决办法
3826
查看次数

扩展/插件通信的体系结构

一旦解决了加载插件的问题(在.NET中通过MEF),下一步要解决的是与它们的通信.简单的方法是实现一个接口并使用插件实现,但有时插件只需要扩展应用程序的工作方式,并且可能有很多扩展点.

我的问题是如何处理这些扩展点.我已经看到了不同的方法,但我不确定每个方法的优点和缺点,以及是否有更多更好的方法来实现这一点:

  • 事件:将静态事件添加到我们想要"扩展"的所有内容中.例如,如果我想为User类添加自定义验证,我可以添加一个OnValidation静态事件处理程序,并在构建时从插件添加事件.
  • 消息:拥有总线和消息.插件可以订阅特定的消息,并在其他类发布该消息时执行操作.该消息应包含插件可以工作的上下文.在验证的情况下,逻辑层将发布UserValidation消息,插件将在收到消息时起作用.
  • 接口:主机应用程序负责调用实现某些接口的所有插件,并为它们提供当前操作的上下文.在验证的情况下,插件可以使用Validate(对象上下文)方法实现IValidator或IUserValidator.

你有没有使用过暴露的方法之一?哪一个最适合你?

在您提出要求之前,我们的应用程序是一个可扩展的核心(用户,rola和内容管理),以构建我们的客户端特定的以内容为中心的Web应用程序.一切都建立在ASP.NET MVC之上.

.net architecture asp.net-mvc plugins extensibility

5
推荐指数
1
解决办法
1206
查看次数

分页助手asp.net mvc

我已经实现了一个分页html助手(改编自史蒂文桑德森的书).这是当前的代码:

public static string PageLinks(this HtmlHelper html,int currentPage,int totalPages,Func pageUrl){StringBuilder result = new StringBuilder();

        for (int i = 1; i <= totalPages; i++)
        {
            TagBuilder tag = new TagBuilder("a");
            tag.MergeAttribute("href", pageUrl(i));
            tag.InnerHtml = i.ToString();
            if (i == currentPage)
                tag.AddCssClass("selectedPage");
            result.AppendLine(tag.ToString());
        }

        return result.ToString();
    }
Run Code Online (Sandbox Code Playgroud)

这会产生一系列链接到我的项目的每个页面.如果有很多页面,这可能有点压倒性.我正在寻找一个类似的实现,产生一些不那么压倒性的东西:

其中6是当前页面.我确信有人必须实施类似的东西...在我必须重新实施轮子之前.

谢谢.

基督教

asp.net-mvc paging

5
推荐指数
0
解决办法
3022
查看次数

NLog不写入数据库表

这是我的NLog配置文件.

<?xml version="1.0" ?>
<nlog autoReload="true" throwExceptions="true"  internalLogLevel="Debug" internalLogToConsole="true"
     internalLogFile="c:\\temp\\nlog.txt" 
      >

  <targets>
    <!--Useful for debugging-->
    <target name="consolelog" type="ColoredConsole"
    layout="${date:format=HH\:mm\:ss}|${level}|${stacktrace}|${message}" />

    <target name="filelog" type="File" fileName="c:\\temp\\nlog1.txt"
    layout="${date}: ${message}" />

    <target name="eventlog" type="EventLog" source="My App" log="Application"
    layout="${date}: ${message} ${stacktrace}" />

    <target name="databaselog" type="Database">

      <dbProvider>sqlserver</dbProvider>

      <!-- database connection parameters -->
      <!-- alternatively you could provide a single 'connectionstring' parameter -->
      <connectionString>Data Source=.\SQLEXPRESS;Initial Catalog=SnSolutions;User Id=sa;Password=test@1234@;</connectionString>
      <!--<add name="DefaultConnection" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=MyTest;User Id=mytest;Password=mytest123;" providerName="System.Data.SqlClient" />-->

      <commandText>
        insert into NLog_Error ([time_stamp],[level],[host],[type],1,[logger],[message],[stacktrace],[allxml]) values(@time_stamp,@level,@host,@type,@source,@logger,@message,@stacktrace,@allxml);
      </commandText>

      <parameter name="@time_stamp" layout="${date}" />
      <parameter …
Run Code Online (Sandbox Code Playgroud)

nlog

2
推荐指数
1
解决办法
7847
查看次数