小编Jon*_*han的帖子

两个.NET项目,一个DB连接字符串?

我有一个包含两个项目的.NET解决方案:

  • 一个ASP.NET MVC项目,'网站'
  • 一个类库,'模型'

"模型"项目包含Linq-to-SQL数据上下文以及一些扩展数据库对象的部分类.

连接字符串在"网站"项目的web.config中定义.

但是,"Models"项目似乎有自己的app.config,其中数据库连接是单独定义的.

这意味着如果连接字符串发生更改,我将不得不更新这两个项目.

有没有办法可以将连接字符串集中到一个地方,并且两个项目仍然使用它?

.net asp.net-mvc configuration connection-string

6
推荐指数
1
解决办法
3191
查看次数

你在哪里放置既不是控制器,模型,助手或ViewModel的类?

在ASP.NET MVC应用程序中,当您拥有非控制器,帮助程序或视图模型的唯一类时,您会怎么做?

例如,假设您有一类对处理地图/位置数据有用的实用程序.

这些实用程序可能由多个控制器使用.

你会为他们创建一个顶级文件夹/命名空间,并将其称为"地图"或其他什么?

architecture asp.net-mvc

6
推荐指数
1
解决办法
1386
查看次数

ViewModels和渲染

在几个示例项目中,我已经看到ViewModels用于将数据对象转换为字符串,以便在View中使用.

ViewModel通常会有一个构造函数,它接收一个参数 - 一个数据对象.然后构造函数将填充ViewModel的各种属性(主要是字符串和整数).

这可以防止在View中出现任何复杂的逻辑.

乍一看,这对我来说似乎是个好主意,因为它更完全地强化了View与复杂逻辑的分离.

例如,假设我的视图试图渲染数据对象的属性"大小",大小是1到3之间的数字,表示"小/中/大".

我不会在视图中使用if/switch语句,而是在ViewModel中只有一个'SizeString'或类似的东西,而if/switch语句将放在ViewModel构造函数中.

有人不同意这种方法吗?

使用其他方法(例如助手)会更好吗?如果是这样,为什么?

asp.net-mvc mvvm separation-of-concerns

6
推荐指数
1
解决办法
654
查看次数

使用AutoMapper映射"X"类型的所有属性

我刚刚开始使用AutoMapper,到目前为止发现它非常直接且节省时间.

只有一点我不确定 - 如何以相同的方式映射给定类型的所有属性?

可以使用lambda在单个语句中使用AutoMapper来完成,与常规映射一样吗?

c# model-view-controller lambda automapper

6
推荐指数
1
解决办法
938
查看次数

Underscore.js对象 - 对象映射器?

是否有Underscore.js函数可以根据其他对象的属性将一个对象映射到另一个对象?

(类似于AutoMapper在.NET中的工作方式.)

例如:

var objectA = { 'name': 'Jonathan', 'city': 'Sydney' };
var objectB = { 'name': 'Jonathan Conway', 'city': 'Sydney', 'errors': [] }

_.mapperMethod(objectB);

=> { 'name': 'Jonathan Conway', 'city': 'Sydney' };
Run Code Online (Sandbox Code Playgroud)

javascript node.js underscore.js

6
推荐指数
1
解决办法
3095
查看次数

如何使用GruntJS运行一个特定的CucumberJS功能?

我正在使用CucumberJS在我的NodeJS Web应用程序上运行测试.

目前,我可以通过执行grunt或仅执行CucumberJS任务来运行我的所有grunt任务grunt cucumberjs.

但现在我只想执行特定功能.

例如,假设我有以下功能文件:

  • Signin.feature
  • Favourite.feature

我想只使用如下命令运行收藏夹功能测试:

grunt cucumberjs Favourite

这可能吗?


顺便说一句,这是我的gruntfile.js:

'use strict';

module.exports = function(grunt) {
    grunt.initConfig({
        pkg: grunt.file.readJSON('package.json'),
        ...
        cucumberjs: {
            src: 'features',
            options: {
                steps: 'features/step_definitions',
                format: 'pretty'
            }
        }
    });

    ...
    grunt.loadNpmTasks('grunt-cucumber');

    grunt.registerTask('default', [... 'cucumberjs']);
};
Run Code Online (Sandbox Code Playgroud)

node.js gruntjs cucumberjs

6
推荐指数
1
解决办法
4666
查看次数

最佳实践 - 只下载您需要的CSS,或使用缩小过程?

在提高整体网站性能(下载和渲染速度)的背景下,以下两个最佳实践之间似乎存在矛盾:

  1. 只关闭正在查看的页面所需的CSS.(因为太多CSS规则导致渲染速度慢)

  2. 始终缩小CSS并将其合并到一个文件中.(因为更多请求意味着页面加载速度较慢

现在说我决定遵守规则1.

出现以下问题:

如果2个页面共享一组CSS规则怎么办?

在这种情况下,我需要将这些规则放在一个单独的文件中,并从两个页面引用该文件.

但是,如果我开始有很多这些"共享规则",我最终可能会引用每个页面中的大量单独文件,从而违反规则2.

例如,页面A可能依赖于CSS 1和2,而页面B和C都依赖于CSS 2而页面D依赖于CSS 1.

在这种情况下,每页只能有一个CSS,甚至每页只有多个CSS,因为有些页面需要与其他页面共享一些CSS文件.

但是我们不能通过将每个页面的所有CSS组合成一个单独的每页CSS文件来解决这个问题吗?

我们可以,但这会产生其他问题.

如果两个页面共享一个CSS片段,即使我们压缩它的地狱,我们仍然会重复下载该片段,每次我们请求一个CSS包含该片段的页面.

因为我们已经逐页压缩了CSS ,所以我们允许在两个或多个页面共享CSS片段的地方进行冗余.

浏览器缓存对我们没有好处,因为对于浏览器,每个CSS文件都有不同的文件名,因此是一个单独的文件,即使其中一些文件包含相同的内容.

那么我们应该打破哪条规则呢?

我要横渡的那个是:

1.您应该只关闭正在查看的页面所需的CSS.

我认为将我的网站的所有CSS缩小/组合起来更加简单和实用,并且一次性完成它.

至于这可能造成的性能问题,我认为它们会因以下事实而减少:

  • 现代浏览器在处理CSS规则方面变得越来越快,所以很快就会在内存中有很多未使用的规则并不重要.

  • 而你的所有的CSS缓存将提高速度比你从留出不必要的规则,这会得到加载获得任何改善多了不少无论如何,当用户浏览到需要这些规则的页面.

我在这儿吗?

css performance minify

5
推荐指数
2
解决办法
718
查看次数

是否可以读取锁定文件?

我正在开发一个应用程序,它检查一个单独的程序(不是我写的)对文件所做的更改。

如果检测到更改,它会打开文件,读取最后一行,然后关闭文件。

我使用以下代码来确保我的程序不会尝试锁定文件,而只会在读取模式下打开它:

FileStream fs =
    new FileStream(
        _scannerFilePath,
        FileMode.Open,
        FileAccess.Read,
        FileShare.ReadWrite);
StreamReader sr = new StreamReader(fs);
var str = sr.ReadToEnd();
sr.Close();
fs.Close();
Run Code Online (Sandbox Code Playgroud)

不幸的是,尽管如此,每当我的程序尝试读取文件时,我仍然收到以下错误:

System.IO.IOException was unhandled
    Message="The process cannot access the file 'D:\\LSDATA\\IdText.txt' because it is being used by another process."
    Source="mscorlib"
    StackTrace:
        at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
        at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy)
        at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare …
Run Code Online (Sandbox Code Playgroud)

.net c# filesystems locking winforms

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

如何反序列化发布到我的NodeJS/Express Web应用程序的数组/对象?

我正在NodeJS/ExpressJS中编写应用程序.

我有一个这样的表格:

<form method="post" action="/sendinfo">
    <label>Name</label>
    <input type="text" name="name" />

    <label>Address</label>
    <input type="text" name="address[number]" />
    <input type="text" name="address[street]" />
    <input type="text" name="address[suburb]" />
    <input type="text" name="address[postcode]" />

    <label>Phones</label>
    <input type="text" name="phones[0]" />
    <input type="text" name="phones[1]" />
</form>
Run Code Online (Sandbox Code Playgroud)

这是我的路线:

app.post('/sendinfo', function (req, res) {

    // ...code to save the contents of req.body to the database...

    res.render('done');
});
Run Code Online (Sandbox Code Playgroud)

表单提交后,我req.body看起来像这样:

{
    "name": "Jonathan",

    "address[number]": "1",
    "address[street]": "Test St",
    "address[suburb]": "TestSuburb",
    "address[postcode]": "1234",

    "phones[0]": "12345678",
    "phones[1]": "87654321"
}
Run Code Online (Sandbox Code Playgroud)

但我希望它看起来像这样,嵌套在属性或数组中的值:

{
    "name": "Jonathan", …
Run Code Online (Sandbox Code Playgroud)

javascript node.js query-string express

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

如何从 Wordpress 插件 PHP 文件自动生成 POT 文件?

我正在开发一个 Wordpress 插件,并注意到主要的 PHP 文件 - 让我们称之为blah.php- 包含如下调用:

100: <?php _e('Foo', 'blah'); ?>
101: <?php _e('Bar', 'blah'); ?>
...
Run Code Online (Sandbox Code Playgroud)

它伴随着blah.pot语言子文件夹中的一个文件,代码如下:

#: blah.php:100
msgid "Foo"
msgstr ""

#: blah.php:101
msgid "Bar"
msgstr ""
Run Code Online (Sandbox Code Playgroud)

假设我想在 PHP 中在上述两段之间添加一段新文本:

100: <?php _e('Foo', 'blah'); ?>
101: <?php _e('Baz', 'blah'); ?> <!-- New -->
102: <?php _e('Bar', 'blah'); ?>
...
Run Code Online (Sandbox Code Playgroud)

这不是意味着我必须blah.pot像这样重新编号吗?

#: blah.php:100
msgid "Foo"
msgstr ""

#: blah.php:101
- msgid "Bar"
+ msgid "Baz"
msgstr ""

+ #: blah.php:102 …
Run Code Online (Sandbox Code Playgroud)

php wordpress translation pot

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