小编Jas*_*own的帖子

有没有人为GUI销售点系统提供数据库,编程语言/框架建议?

我们公司有一个销售点系统,有许多附加功能,如订购和接收功能,销售和订单历史等.我们的主要问题是系统设计不正确,因此修复和修复需要很长时间.处理客户的要求.此外,我们正在使用的当前技术(Progress数据库,语言的Progress 4GL)由于数据库连接的多用户许可费等而对我们的客户产生了相当多的许可费用.

经过大量讨论后,看起来我们可能会从头开始(至少暂时保留当前产品).我们正在寻找以下几点:

  1. 使用一个漂亮的GUI前端创建系统(它当前是CHUI,并且应用程序的构建方式不允许我们重新设计前端......没有分层或分离业务逻辑和gui ......不寒而栗).

  2. 创建具有模块化不同功能的系统,使产品不必包含所有功能.这将为我们当前希望获得基本功能和更低价格标签的客户降低成本.那些想要它们的人可以使用铃声和口哨声.

  3. 使用适当的设计模式可以使产品随时轻松添加或更改任何部件(即更改数据库或更改前端而无需重写应用程序或大部分应用程序).这是今天的问题,因为Progress 4GL代码是直接针对数据库编译的.数据库中的小变化需要大量代码重新编译.

我们的新系统将基于Linux,客户端应用程序可以从一个或多个窗口框中提供功能.

所以我正在寻找的是关于哪些数据库和/或框架或编程语言可能会推荐给这类产品的任何建议.任何在这个领域有经验的人都可以指出我们正确的方向,甚至有一些想要避免的想法.我们已经考虑过.NET和SQL Express(我们不需要企业级数据库),但这会限制我们使用Windows(据我所知).我听说过Mono在Linux环境下编写.NET代码,但我对此还不太了解.我们还考虑了基于Java和MySql的实现.

总结一下,我们希望做到以下几点:

  1. 将许可成本降低到我们用于开发产品的技术上(Oracle,yikes!MySQL,很好.)

  2. 提供易于维护和支持的解决方案.

  3. 具有能够通过CHUI前端在"旧"硬件上运行的组件的解决方案.(我们的一些客户拥有40多个终端,为了转换为PC,需要大量现金).

建议将不胜感激.

谢谢

[更新]我应该注意到,我们目前正在进行总成本分析.这个问题旨在为我们提供一些"受过教育的"选项,以便考虑纳入或分析.任何可以分享有关客户端/服务器设置的经验/建议的人都会受到赞赏(不仅仅是那些有销售点系统经验的人......这只是一个奖励).

[UPDATE]

对于任何有兴趣的人,我们最终选择了Microsoft Dynamics NAV,LS Retail(销售点和其他各种东西的插件),然后做了一些(现在正在进行)定制工作.这种设置为我们提供了一个完全集成的g/l系统的额外好处,这是我们当前系统所缺乏的.

database frameworks client-server point-of-sale

8
推荐指数
1
解决办法
2996
查看次数

最大化系统托盘中的应用程序?

我写了一个小的WPF应用程序,当'关闭'最小化到系统托盘(客户要求).双击弹出它,或右键单击提供上下文菜单退出.

但是如果应用程序被最小化,并且用户导航到Start-> All Programs-> The Application,它将启动一个新实例.

如果用户执行此操作而不是启动新实例,我需要做什么(在C#中)才能让应用程序最大化正在运行的实例?

谢谢!

c# wpf system-tray application-singleton

7
推荐指数
1
解决办法
2436
查看次数

Autofac将参数传递给嵌套类型

我在我的WCF服务中使用Autofac作为我的IoC.我有一种情况,我想将一个对象传递给嵌套类型(即一种未直接解析的类型,但在解析另一种类型时).据我所知,将此对象作为构造函数参数传递是Autofac中的首选方法.以下是这种情况的一个例子.

嵌套类型:

public class EventLogger<T> : IEventLogger<T>
{
    public EventLogger(IRepository<T> repository, User currentUser) { ... }  
}
Run Code Online (Sandbox Code Playgroud)

我实际上试图解决的类型:

public class SomeBusinessObject  
{  
    public SomeBusinessObject(IEventLogger<SomeLogEventType> logger, ...) { ... }  
}
Run Code Online (Sandbox Code Playgroud)

注册:

var builder = new ContainerBuilder();
builder.RegisterGeneric(typeof(Repository<>)).As(typeof(IRepository<>));
builder.RegisterGeneric(typeof(EventLogger<>)).As(typeof(IEventLogger<>));
builder.RegisterType<SomeBusinessObject>();
Run Code Online (Sandbox Code Playgroud)

解析我的WCF服务操作:

var currentUser = GetUserFromServiceContext();  
var bo = lifetimeScope.Resolve<SomeBusinessObject>();
Run Code Online (Sandbox Code Playgroud)

我应该如何以及在何处将当前用户传递给我的记录器?我是否应该假设WCF操作必须知道解析SomeBusinessObject需要首先解析IEventLogger并在解析SomeBusinessObject时传递已解析的实例?这样的事情(原谅我,如果这不起作用,这只是一个想法):

var currentUser = GetUserFromServiceContext();  
var logger = lifetimeScope.Resolve<IEventLogger<SomeLogEventType>>(new NamedParameter("currentUser", currentUser));  
var bo = lifetimeScope.Resolve<SomeBusinessObject>(new NamedParameter("logger", logger));
Run Code Online (Sandbox Code Playgroud)

如果这是解决方案,如果类型嵌套得更深,会发生什么?难道这至少打败了依赖注入的一些目的吗?

c# ioc-container autofac

7
推荐指数
1
解决办法
3073
查看次数

ClojureCLR上有没有合适的文档或教程?

我决定研究Clojure(受本书启发).经过一些研究后,我了解到我可以通过使用ClojureCLR来利用我的.Net经验,而不需要学习各种Java库.但是,我发现很少有关于Clojure的CLR版本的文档(甚至官方网站似乎都会将您推向JVM实现的文档).

有谁知道哪里可以找到一些像样的教程,书籍,文章或文档?如果确实没有,可以安全地假设我可以通过JVM实现了解我需要知道的大部分内容(即两个实现之间没有什么区别,因此知识可以公平转移)?

如果需要,我愿意学习JVM版本和Java库(很好地扩展......这就是为什么我首先要研究函数/ lisp语言).

clojure clojureclr

7
推荐指数
1
解决办法
1171
查看次数

等待外部过程完成

我有一个被调用的方法,虽然我希望在方法完成后显示消息框(现在在调用方法后直接显示消息框):

if (Check == true)
{
    StartConvIpod();
}
else
{

}
MessageBox.Show("Operation Successful!");
Run Code Online (Sandbox Code Playgroud)

StartConvIpod:

      private void StartConvIpod()
        {

            string res = Directory.EnumerateFiles("dump").
    OrderBy(x => File.GetCreationTime(x)).Last();

            string sub = res.Substring(5);

            string sub2 = sub.Substring(0, sub.Length - 4);


            Process p = new Process();
            p.StartInfo.WorkingDirectory = "dump";
            p.StartInfo.FileName = "ffmpeg.exe";
            p.StartInfo.Arguments = "-i " + sub + " -f mp4 -vcodec mpeg4 -b 700k -aspect 4:3 -r 23.98 -s 320x240 -acodec ac3 -ar 48000 iPodConversions\\" + sub2 + ".mp4";
            p.Start();
}
Run Code Online (Sandbox Code Playgroud)

.net c# windows winforms

7
推荐指数
2
解决办法
7205
查看次数

如何重构静态类以使用依赖注入?

我继承了一些代码,它有一个带有所有静态方法的AuthenticationManager类.

我介绍DI并想添加一个带有依赖UserController的构造函数

UserController _userController;

public AuthenticationManager(UserController userCont)
{
    _userController = userCont;
}
Run Code Online (Sandbox Code Playgroud)

现在我得到编译时错误,因为静态方法引用了非静态变量.您的最佳实践建议是什么,以使这个与该类和调用代码的最小更改一起工作?

我们使用SimpleServiceLocator作为IOC容器.

refactoring static-methods dependency-injection legacy-code inversion-of-control

7
推荐指数
1
解决办法
1455
查看次数

什么是SQL Like运算符的合适替代品以提高性能?

我正在开发一个在Windows Mobile 6上运行的应用程序,它需要能够从项目表格中检索包含给定字符串(由最终用户提供)的项目表中的所有项目.问题是表中大约有170,000个项目.由于我需要在描述中的任何位置返回包含字符串的所有项目,因此我不得不使用LIKE%string%,这样就无法使用索引.数据和表结构最初基于Progress数据库,它在任何单词索引字段上都有一个精彩的包含运算符.我们的移动应用程序不是这种情况,因为它使用的是SQL Server Compact 3.5.

基本上,我的DAL运行查询并检索SqlCeDataReader,然后使用ItemFactory创建仅包含匹配项的List对象.这显然可以让我们将域/业务对象与数据访问层分开.

精细和花花公子,除了在我搜索描述中包含类似"高尔夫"之类的所有项目时检索项目所需的8米和42秒.显然,这不是最终用户可接受的时间范围.

我的第一次尝试是使用SELECT*FROM Item"(在其中一个主索引字段上使用order by子句)从数据库中检索所有项目.此时,我在运行SqlCeDataReader时运行了IndexOf检查如果项目包含所请求的描述文本,则ItemFactory仅向List对象添加项目.这将速度提高到1m 46s.不是太破旧,但仍然太慢.

然后我尝试了另一种显示出承诺的方法......几乎......当应用程序启动时,我尝试创建一个包含数据库中所有项目对象的List(大约需要2分钟来运行查询并填充整个列表,但是至少它只是一次,因为应用程序正在初始化......仍然......呃).一旦列表完成,我可以轻松地在该列表上运行查询,执行以下操作(我希望我的语法正确...我现在不工作,我没有在PC上使用Visual Studio我坐在那里:

List<Item> specificItems = 
    AllItems.FindAll(i => i.Description.IndexOf(searchString, StringComparison.OrdinalIgnoreCase) >= 0);
Run Code Online (Sandbox Code Playgroud)

这种方法将其降至21秒.非常好(虽然在宏伟的计划中仍然很慢).但是,问题是如果我从数据库加载所有项目,内存使用量太大了.在初始加载期间,我必须切断最后20,000个项目(所以21s时间框架可能更像是25s),因为抛出了OutOfMemoryException.根据模拟器上的内存管理器,我仍然有大约20 MB的空闲RAM,但我听说一个进程只能有32 MB或RAM相关联(不确定WM 6是否属实,但它出现了所以).

为了确保它不是因为我使用List对象来保存所有项目(我在构造函数中实例化了所需的容量以避免动态调整大小),我也读过它可能会导致额外的内存使用量implicity调用EnsureCapacity,我尝试使用Item []数组(提前调整大小).这仍然存在内存问题,尺寸差异可以忽略不计.

好吧漫无边际.我知道我可能会有一些如何限制datareader从数据库返回的记录(通过对不同类型字段的一些索引搜索),然后可能会在较小的项目子集上使用indexOf来获得最大性能(因此一起跳过Like运算符).这将导致最终用户不仅必须输入描述搜索(可能是项目层次结构信息以限制在其中搜索的项目类型).

有任何想法吗?我是以错误的方式来做这件事的吗?

谢谢你的聆听(对不起这篇文章很长,我有点大声思考).

哦,我应该添加(只是总结)我正在使用的东西:

  • Windows Mobile 6
  • Sql Server Compact Edition 3.5
  • C#3.5

更新:虽然下面提到的Bloom Filter方法看起来很有趣,但我无法满足一个要求(我上面没有真正说明).我无法真正匹配其他词语中包含的词语(例如"俱乐部"不会返回"俱乐部").因此,我被迫完全使用不同的方法(Kent Fredric ......感谢你指出这一点).我已经将Kent的答案标记为正确,因为他的方法是满足最多要求的(Mitch,你的问题与Jaunder建议的Bloom过滤器类似).但是,我采用了不同的方法(现在......),而不是他的方式.

我所做的是将所有项目对象拉入内存,只有项目编号和描述(这使其保持在内存限制之下,但它仍然会导致比我喜欢的更长的初始化...多线程并在后台加载该信息而应用程序正在运行可以照顾我猜).为了执行搜索,我编写了自己的包含例程.该例程使用非托管c#代码编写,该代码使用两个指针和几个循环来运行描述和所需的匹配文本.如果它在描述中的任何位置找到匹配项,则会将项目编号添加到数组中.搜索完所有项目后,新查询将返回到数据库并仅捕获匹配的项目编号(由于整数字段上的索引,该编号非常快).然后,这些项目在List中创建,包含所有信息(不仅仅是项目编号和描述).整个操作大约需要5-10秒(取决于描述),这对于现在来说已经足够了.

我仍然会考虑进一步优化它(可能能够跟踪搜索项的字符数...如果项目描述中剩余的字符少于所需的文本,则循环可以继续直接到下一个项目) .

任何建议仍然欢迎.现在我已将肯特的答案标记为我的问题"最正确".

向Dolch道具,帮助我编写包含例程.

performance memory-management windows-mobile sql-server-ce sql-like

6
推荐指数
2
解决办法
2001
查看次数

memcached是关于时间的吗?

我相信使用mamcached缓存内容的标准方法是将对象插入缓存一段时间,例如

 memcli:set(key, rows_array, 5 * 60)
Run Code Online (Sandbox Code Playgroud)

是否有更好的方法来缓存缓存将在数据库内部检查的内容,以查看数据是否已更改而不是依赖于可能导致同步问题的计时器?

我打算用PHP.

php memcached caching

6
推荐指数
2
解决办法
231
查看次数

获得WPF扩展器头的高度

我需要获得WPF Expander.Header的高度,而不是整个Expander只是Header的高度.

没有属性可以获取它,因为Expander.Header + Expander.Content是Expander.Height.

你会怎么做才能获得Expander.Header高度?

wpf height header expander

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

只读改变结构的行为

我试图了解一些基本概念:

class Program
{
   private static readonly MyStruct m = new MyStruct();
   static void Main(string[] args)
    {
       //new MutableSample().RunSample();

       Console.WriteLine(m.ChangeInternal());
       Console.WriteLine(m.ChangeInternal());
       Console.WriteLine(m.ChangeInternal());
       Console.Read();
    }
}

public struct MyStruct
{
    private int x;
    public int ChangeInternal()
    {
        this.x = this.x + 1;
        return this.x;
    }
}
Run Code Online (Sandbox Code Playgroud)

当我运行这段代码时,它给了我1,1,1,但是当我删除"readonly"时它会说1,2,3.

有人可以向我解释一下吗?

c# readonly immutability

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