我有一个包含两个项目的.NET解决方案:
"模型"项目包含Linq-to-SQL数据上下文以及一些扩展数据库对象的部分类.
连接字符串在"网站"项目的web.config中定义.
但是,"Models"项目似乎有自己的app.config,其中数据库连接是单独定义的.
这意味着如果连接字符串发生更改,我将不得不更新这两个项目.
有没有办法可以将连接字符串集中到一个地方,并且两个项目仍然使用它?
在ASP.NET MVC应用程序中,当您拥有非控制器,帮助程序或视图模型的唯一类时,您会怎么做?
例如,假设您有一类对处理地图/位置数据有用的实用程序.
这些实用程序可能由多个控制器使用.
你会为他们创建一个顶级文件夹/命名空间,并将其称为"地图"或其他什么?
在几个示例项目中,我已经看到ViewModels用于将数据对象转换为字符串,以便在View中使用.
ViewModel通常会有一个构造函数,它接收一个参数 - 一个数据对象.然后构造函数将填充ViewModel的各种属性(主要是字符串和整数).
这可以防止在View中出现任何复杂的逻辑.
乍一看,这对我来说似乎是个好主意,因为它更完全地强化了View与复杂逻辑的分离.
例如,假设我的视图试图渲染数据对象的属性"大小",大小是1到3之间的数字,表示"小/中/大".
我不会在视图中使用if/switch语句,而是在ViewModel中只有一个'SizeString'或类似的东西,而if/switch语句将放在ViewModel构造函数中.
有人不同意这种方法吗?
使用其他方法(例如助手)会更好吗?如果是这样,为什么?
我刚刚开始使用AutoMapper,到目前为止发现它非常直接且节省时间.
只有一点我不确定 - 如何以相同的方式映射给定类型的所有属性?
可以使用lambda在单个语句中使用AutoMapper来完成,与常规映射一样吗?
是否有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) 我正在使用CucumberJS在我的NodeJS Web应用程序上运行测试.
目前,我可以通过执行grunt或仅执行CucumberJS任务来运行我的所有grunt任务grunt cucumberjs.
但现在我只想执行特定功能.
例如,假设我有以下功能文件:
我想只使用如下命令运行收藏夹功能测试:
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) 在提高整体网站性能(下载和渲染速度)的背景下,以下两个最佳实践之间似乎存在矛盾:
只关闭正在查看的页面所需的CSS.(因为太多CSS规则导致渲染速度慢)
始终缩小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缓存将提高速度比你从留出不必要的规则,这会得到加载获得任何改善多了不少无论如何,当用户浏览到需要这些规则的页面.
我在这儿吗?
我正在开发一个应用程序,它检查一个单独的程序(不是我写的)对文件所做的更改。
如果检测到更改,它会打开文件,读取最后一行,然后关闭文件。
我使用以下代码来确保我的程序不会尝试锁定文件,而只会在读取模式下打开它:
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) 我正在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) 我正在开发一个 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) asp.net-mvc ×3
node.js ×3
.net ×2
c# ×2
javascript ×2
architecture ×1
automapper ×1
css ×1
cucumberjs ×1
express ×1
filesystems ×1
gruntjs ×1
lambda ×1
locking ×1
minify ×1
mvvm ×1
performance ×1
php ×1
pot ×1
query-string ×1
translation ×1
winforms ×1
wordpress ×1